gpt4 book ai didi

SQL - 将所有用户合并到一张表中

转载 作者:行者123 更新时间:2023-12-03 02:15:01 25 4
gpt4 key购买 nike

表:热门

UserName   FriendName--------   ---------- John       SarahPhilip     UrsulaJohn       MarryJohn       JeremyPhilip     BrockKhan       Lemy

我想要带有查询的列表;

John       Philip       Khan--------   ----------   --------Sarah      Ursula       LemyMarry      Brock        -NULL-Jeremy     -NULL-       -NULL-

我有 100 多个用户名...帮助我使用 SQL 查询 (MSSQL) 列出

最佳答案

如果您有“100 多个用户名”,您将希望这是动态的,这样您就不必为每个用户名键入特定的 CASE 语句。

此外,您也不希望每次将新用户名添加到表中时都更新脚本。

下面的脚本将动态检索所有不同的用户名,并为他们创建一个列,其中包含所有 friend 的行。

    DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX);

SET @cols = STUFF((SELECT distinct ',MAX(CASE WHEN UserName = '''
+ p.UserName + ''' THEN FriendName END) AS '
+ QUOTENAME(p.UserName) FROM Popular p
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')

SET @query = 'SELECT ' + @cols + ' FROM
(SELECT UserName, FriendName
,ROW_NUMBER() OVER (PARTITION BY UserName ORDER BY FriendName) AS RowNum
FROM Popular GROUP BY USERNAME, FRIENDNAME
) x
GROUP BY RowNum'

EXECUTE(@query);

我的上述输出如下所示;

╔════════╦══════╦════════╗
║ John ║ Khan ║ Philip ║
╠════════╬══════╬════════╣
║ Jeremy ║ Lemy ║ Brock ║
║ Marry ║ NULL ║ Ursula ║
║ Sarah ║ NULL ║ NULL ║
╚════════╩══════╩════════╝

您应该能够对整个表运行此命令并获取所有可能的用户名的结果,而无需键入单独的 CASE 语句。

对于任何想要测试此功能的人,这里是测试表和数据脚本;

    IF EXISTS ( SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'Popular'
AND TABLE_SCHEMA = 'dbo'
AND TABLE_TYPE = 'TABLE')
DROP TABLE [dbo].[Popular];
GO

CREATE TABLE [dbo].[Popular]
(
UserName VARCHAR(20),
FriendName VARCHAR(20)
);
GO

INSERT INTO [dbo].[Popular] (UserName,FriendName) VALUES
('John','Sarah'),
('Philip','Ursula'),
('John','Marry'),
('John','Jeremy'),
('Philip','Brock'),
('Khan','Lemy');

关于SQL - 将所有用户合并到一张表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54445751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com