SQL-列不是字母

时间:2019-03-07 13:01:32

标签: sql-server tsql dynamic-sql

列不是按字母顺序排列的,因为我不能将“ order by”与“ distinct”一起使用。请帮助我...

我的查询:

DECLARE @cols AS NVARCHAR(MAX), 
        @query AS NVARCHAR(MAX); 
SET @cols = STUFF((SELECT distinct ',MAX(CASE WHEN KullaniciAdi = '''  + p.KullaniciAdi + ''' THEN KisiAdi END) AS '  + QUOTENAME(p.KullaniciAdi) 
FROM Populer p FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)')  ,1,1,'') 
set @query = 'SELECT top 100 ' + @cols + ' FROM  (   SELECT KullaniciAdi,KisiAdi,ROW_NUMBER() OVER (PARTITION BY KullaniciAdi ORDER BY EklenmeTarihi) AS RowNum FROM Populer ) x GROUP BY RowNum ' 
EXECUTE(@query)

结果:

enter image description here

2 个答案:

答案 0 :(得分:1)

当然可以。关键是将distinct替换为group by。然后使用order by

SET @cols = STUFF((SELECT ', MAX(CASE WHEN KullaniciAdi = '''  + p.KullaniciAdi + ''' THEN KisiAdi END) AS '  + QUOTENAME(p.KullaniciAdi) 
                   FROM Populer p
                   GROUP BY KullaniciAdi
                   ORDER BY p.KullaniciAdi
                   FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'
                  ), 1, 1, ''
                 ) ;

答案 1 :(得分:1)

一种解决方法是使查询成为派生表:

SELECT * FROM 
  (SELECT DISTINCT {the rest of your current query}) t
ORDER BY SomeColumn