sql服务器
我想从下面的图像创建以下输出:
输入数据来自视图( Select * from test
)。 目标是获取progress
列包含文本tbd
和counter
编号为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?