Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-将所有用户合并到一个表中,不带不规则的空值_Sql_Sql Server - Fatal编程技术网

SQL-将所有用户合并到一个表中,不带不规则的空值

SQL-将所有用户合并到一个表中,不带不规则的空值,sql,sql-server,Sql,Sql Server,我希望null值位于列表的末尾,但将它们放在名称之间 KullaniciAdi KisiAdi ------------ ------------ AHMET GÜNDÜZ " Ned Hsoleb(Guzel Alli) " --+ AHMET GÜNDÜZ Raghuvar Masala | . . | . .

我希望null值位于列表的末尾,但将它们放在名称之间

KullaniciAdi      KisiAdi
------------      ------------
AHMET GÜNDÜZ      " Ned Hsoleb(Guzel Alli) " --+
AHMET GÜNDÜZ      Raghuvar Masala              |
.                 .                            |
.                 .                            | AHMET GÜNDÜZ Has 10 Friends
.                 .                            |
.                 .                            |
AHMET GÜNDÜZ      Mint Agro -------------------+
ALİ AKKUM         Mustafa Saidmurodov -----+
ALİ AKKUM         Tarimkoop Ihsangazi      |
.                 .                        |
.                 .                        | ALİ AKKUM Has 9 Friends
.                 .                        |
.                 .                        |
ALİ AKKUM         Ali Uçar  ---------------+
YASEMİN AYSEN     Pepinier El Fertas --+
.                 .                    |
.                 .                    | YASEMİN AYSEN Has 6 Friends
.                 .                    |
YASEMİN AYSEN     Sarker Tredres ------+
这是我的查询联合-所有用户,但不规则的空值; 将@cols声明为NVARCHARMAX,将@query声明为NVARCHARMAX; 设置@cols=STUFFSELECT distinct',当KullaniciAdi='+p.KullaniciAdi+'时为MAXCASE,然后KisiAdi结束为'+QuoteNameep.KullaniciAdi,来自Popper p,用于XML路径,TYPE.value'',NVARCHARMAX',1,1, 将@query='从选择KullaniciAdi、KisiAdi、按KullaniciAdi顺序划分的行数中选择'+@cols+',按EklenmeTarihi将其设置为Popper x GROUP中的RowNum BY RowNum'
EXECUTE@query在GROUPBY语句之后,您需要添加这样的ORDERBY子句,以便将null值推到末尾

ORDER BY 
ISNULL(AHMET GÜNDÜZ ,'zzzzz'),ISNULL(ALİ AKKUM  ,'zzzzz'),ISNULL(YASEMİN AYSEN,'zzzzz')
此查询将首先输出所有非空值,并将空值推送到最后一行。试试这个

DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX), @ordercols as NVARCHAR(MAX); 
SET @ordercols = STUFF((SELECT distinct ',case when isnull([' + p.KullaniciAdi + '],''0'')=''0'' then ''0'' else ''1'' end ' FROM Populer p FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)')  ,1,1,'') 
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 * from(SELECT ' + @cols + ' FROM  (   SELECT KullaniciAdi,KisiAdi,ROW_NUMBER() OVER (PARTITION BY KullaniciAdi ORDER BY EklenmeTarihi) AS RowNum FROM Populer ) x GROUP BY RowNum)a order by concat(  ' +@ordercols+') desc'
EXECUTE(@query)

您必须通过以下方式将以下代码添加到运算符顺序:case当KisiAdi为null时,则0否则1 end desc

您可以使用ROW_NUMBER来获得结果。下面的SQL将在末尾显示空值。我刚刚用行号修改了您的SQL

输出


在sql查询中为这些列添加order by子句,并检查WHERE?你能给我一个带有代码的示例吗?你已经能够修改在上一个问题中给你的查询了。当然,您可以添加ORDER BY.ORDER BY仍然添加了ORDER BY EklenmeTarihi。我无法理解…我有100多个用户,这意味着查询有100多个“ISNULL”字:你可以将其动态设置为@cols,你只需要添加一个与isnulll的连接就可以了,因为我的sql技能不足以实现你的建议。你能帮我吗?Ajan Balakumaran你在吗?@HasanKaanTURAN你能不能为你的表创建一个提琴,这样我就可以测试查询并给出解决方案。Eklematarihi列中的值是什么?上传日期行EklenmeTarihi列的值是否为null?不可能:我检查过了KisiAdi列的值是否为null?KullaniciAdi ASC的第二个顺序是否不起作用:也将由KisiAdi排序ASC@HasanKaanTURAN,我已更改代码。现在检查表中的列是按字母顺序排列的。但当我尝试在表上执行时,不起作用:。我能把我的数据寄给你吗?你能在我的桌子上测试你的代码吗?
    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 ' + @cols + 
        ' FROM  (   
            SELECT KullaniciAdi, KisiAdi, 
                ROW_NUMBER() OVER 
                (PARTITION BY KullaniciAdi ORDER BY case when KisiAdi is null then 0 else 1 end desc, EklenmeTarihi) AS RowNum 
            FROM Populer ) x 
        GROUP BY RowNum '; 

    EXECUTE(@query);
DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); 
CREATE TABLE #tempPopuler (KullaniciAdi VARCHAR(50), KisiAdi VARCHAR(50))
INSERT INTO #tempPopuler VALUES('AHMET', 'Ned Hsoleb')
INSERT INTO #tempPopuler VALUES('AHMET', 'Raghuvar')
INSERT INTO #tempPopuler VALUES('AHMET', 'Mint Agro')
INSERT INTO #tempPopuler VALUES('ALI', 'Mustafa')
INSERT INTO #tempPopuler VALUES('ALI', 'Tarimkoop')
INSERT INTO #tempPopuler VALUES('YASEMIN', 'Pepinier')
INSERT INTO #tempPopuler VALUES('AHMET', 'A')
INSERT INTO #tempPopuler VALUES('AHMET', 'B')
INSERT INTO #tempPopuler VALUES('AHMET', 'C')
INSERT INTO #tempPopuler VALUES('ALI', 'A')
INSERT INTO #tempPopuler VALUES('ALI', 'B')
INSERT INTO #tempPopuler VALUES('YASEMIN', 'A')
INSERT INTO #tempPopuler VALUES('YASEMIN', 'B')

SET @cols = STUFF((SELECT distinct ',(SELECT KisiAdi FROM (SELECT ROW_NUMBER() OVER (ORDER BY KisiAdi ASC) AS rownumber, KullaniciAdi, KisiAdi FROM [#tempPopuler] where KullaniciAdi = '''  + p.KullaniciAdi + ''') AS foo WHERE rownumber = x.ROW and  KullaniciAdi ='''  + p.KullaniciAdi + ''') AS'  + QUOTENAME(p.KullaniciAdi) FROM #tempPopuler p FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)')  ,1,1,'') 
set @query = 'SELECT ' + @cols + ' FROM  (SELECT KullaniciAdi,KisiAdi, ROW_NUMBER() OVER(ORDER BY KisiAdi ASC) AS [ROW] FROM #tempPopuler) x' 

EXECUTE(@query)

DROP TABLE #tempPopuler