sql服务器

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

样品

输入数据来自视图( Select * from test )。 目标是获取progress列包含文本tbdcounter编号为1的所有数据。

这可以通过case来解决吗?

由于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')

我无法让它工作。

希望你能帮助我。

非常感谢。


使用Exists子句可以实现您想要的结果。

询问

SELECT
    *
FROM test t
WHERE EXISTS (SELECT 1 FROM test
            WHERE t.ID = ID
            AND progress = 'tbd'
            AND counter = 1)

结果

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

而另一种替代解决方案就是像这样简单的SELF JOIN 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

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


只需尝试:

select * from test where progress = 'tbd' and counter = 1

也许这会帮助你:

select  *,
        row_number() over(partition by    Progress order by   Counter)
        rowID
into #tmp
from    Test

select  *
from    #tmp
where   ID in(
            select  ID
            from    #tmp
            where   Counter = 1
                    and Progress = 'tbd'
        )
order by    ID,
            rowID
链接地址: http://www.djcxy.com/p/90575.html

上一篇: sql server

下一篇: Asp.Net Core 1.0 (aka Asp.Net 5) website refresh with any file change?