【问题标题】:SQL merging tables [duplicate]SQL合并表[重复]
【发布时间】:2014-09-08 07:36:18
【问题描述】:

我正在尝试合并几个表以获得如下图所示的输出。

我的问题是我不确定使用什么类型的连接来实现这一点

谁能帮我语法。

【问题讨论】:

  • 您可能需要使用PIVOT
  • 多少测试与多少用户,逻辑上我想你想切换输出的行和列。你用什么来输出这个报告?
  • 请以可用格式发布您问题的数据。理想情况下,F5 就绪 create tableinsert 语句。现在我只给你一个提示:PIVOTFULL OUTER JOIN

标签: sql sql-server


【解决方案1】:

你可以做这样的事情,这是一个动态的枢纽,因为你可能会添加/删除用户?

CREATE TABLE #Tests (
    Test_ID INT,
    TestName VARCHAR(50));
INSERT INTO #Tests VALUES (1, 'SQL Test');
INSERT INTO #Tests VALUES (2, 'C# Test');
INSERT INTO #Tests VALUES (3, 'Java Test');
CREATE TABLE #Users (
    [User_ID] INT,
    UserName VARCHAR(50));
INSERT INTO #Users VALUES (1, 'Joe');
INSERT INTO #Users VALUES (2, 'Jack');
INSERT INTO #Users VALUES (3, 'Jane');
CREATE TABLE #UserTests (
    ID INT,
    [User_ID] INT,
    Test_ID INT,
    Completed INT);
INSERT INTO #UserTests VALUES (1, 1, 1, 0);
INSERT INTO #UserTests VALUES (2, 1, 2, 1);
INSERT INTO #UserTests VALUES (3, 1, 3, 1);
INSERT INTO #UserTests VALUES (4, 2, 1, 0);
INSERT INTO #UserTests VALUES (5, 2, 2, 0);
INSERT INTO #UserTests VALUES (6, 2, 3, 0);
INSERT INTO #UserTests VALUES (7, 3, 1, 1);
INSERT INTO #UserTests VALUES (8, 3, 2, 1);
INSERT INTO #UserTests VALUES (9, 3, 3, 1);
DECLARE @Cols VARCHAR(MAX);
SELECT @Cols = STUFF((SELECT distinct ',' + QUOTENAME(u.UserName) 
            FROM #Users u
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'');
DECLARE @Query NVARCHAR(MAX);
SELECT @Query = 'SELECT TestName, ' + @Cols + ' FROM
(
    SELECT 
        t.TestName,
        u.UserName,
        ut.Completed
FROM
    #Tests t
    INNER JOIN #UserTests ut ON ut.Test_ID = t.Test_ID
    INNER JOIN #Users u ON u.[User_ID] = ut.[User_ID]) x
    PIVOT (
        MAX(Completed)
        FOR UserName IN (' + @Cols + ')
    ) AS pt';
EXEC(@Query);

结果是:

TestName    Jack    Jane    Joe
C# Test     0       1       1
Java Test   0       1       1
SQL Test    0       1       0

(与您的结果相同,但排序顺序不同。)

【讨论】:

  • 是的,可能会添加/删除用户。我会试试上面的。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-29
  • 2019-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-22
相关资源
最近更新 更多