sql - SQL - 在一个没有不规则空值的表中联合所有用户
问题描述
我希望空值位于列表的末尾,但将它们放在名称之间。
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 ------+
这是我的查询联合 - 所有用户,但具有不规则的空值;
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 EklenmeTarihi) AS RowNum FROM Populer ) x GROUP BY RowNum '
EXECUTE(@query)
但是,我想要 ;
AHMET GÜNDÜZ ALİ AKKUM YASEMİN AYSEN
------------ ------------ -------------
" Ned Hsoleb(Guzel Alli) " Mustafa Saidmurodov Pepinier El Fertas
Raghuvar Masala Tarimkoop Ihsangazi .
. . .
. . .
. . .
. . Sarker Tredres
. . NULL
. . NULL
. Ali Uçar NULL
Mint Agro NULL NULL
我无法编辑我的查询。你能帮我解决这个问题吗?
解决方案
你可以使用ROW_NUMBER()
来达到效果。以下 SQL 将在末尾显示 NULL 值。我刚刚用ROW_NUMBER()
.
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
输出
推荐阅读
- shiro - Shiro 注销页面:“没有带有 id 的会话” - Shiro
- python - 分析多个数据框列以创建新的分类变量?
- android - Flutter Firebase auth facebook无法正常工作
- c++ - 构建 sqlite3mc 合并失败并出现“_mm_aesimc_si128”:目标特定选项不匹配 - 即使使用 -march=native
- sql - SQL 同时选择和更新多个用户
- powershell - Powershell循环遍历每个用户配置文件以获取软件的版本号,然后创建卸载字符串并运行命令
- windows - 当稀疏数组变大时,如何解决这个问题,元素不再显示?
- python - 为什么 re.Match 对象返回的结束索引高于预期?
- gitlab - 使用 Google Cloud Run 和 GITlab 设置 CICD
- python - 如何实现一个key-key或value-value类型的数据结构