T-SQL - 根据两列获取数据

rat*_*lko 7 t-sql sql-server sql-server-2012

我想从下面的图像创建以下输出:

样品

输入数据来自视图(Select * from test).我们的目标是让这里的所有数据progress列包含文本tbdcounter数字为1.

在声明的情况下可以解决这个问题吗?

由于sqlfiddle不在这里工作的架构:

CREATE TABLE test
(
    [ID] [int] NOT NULL,
    [Counter] [int] NOT NULL,
    [Name] nvarchar(200) NULL,
    [Progress] nvarchar(200) NOT NULL
)

INSERT INTO test
VALUES (1, 1, 'userA', 'tbd'),
       (1, 2, 'userB', 'done'),
       (1, 3, 'userC', 'tbd'),
       (2, 1, 'userB', 'done'),
       (2, 5, 'userA', 'tbd'),
       (3, 1, 'userD', 'tbd'),
       (3, 2, 'userA', 'done'),
       (3, 7, 'userC', 'tbd'),
       (3, 11, 'userB', 'tbd')
Run Code Online (Sandbox Code Playgroud)

我无法让它发挥作用.

希望你能帮助我.

非常感谢.

Kri*_*ana 2

使用Exists子句你可以达到你想要的结果。

询问

SELECT
    *
FROM test t
WHERE EXISTS (SELECT 1 FROM test
            WHERE t.ID = ID
            AND progress = 'tbd'
            AND counter = 1)
Run Code Online (Sandbox Code Playgroud)

结果

ID  Counter  Name    Progress
-----------------------------
1      1     userA   tbd
1      2     userB   done
1      3     userC   tbd
3      1     userD   tbd
3      2     userA   done
3      7     userC   tbd
3      11    userB   tbd
Run Code Online (Sandbox Code Playgroud)

另一种替代解决方案很简单,SELF JOIN如下所示-

询问

SELECT
    le.ID, le.Counter, le.Name, le.Progress
    FROM test le
INNER JOIN test re ON le.ID = re.ID
WHERE re.progress = 'tbd'
    AND re.counter = 1
Run Code Online (Sandbox Code Playgroud)

上面的查询返回相同的结果。