SQL选择项目具有不同值的类别
我有一个分类表:SQL选择项目具有不同值的类别,sql,sql-server,Sql,Sql Server,我有一个分类表: CategoryID Description ------------------------- 1 Red category 2 Green category 3 Blue category 和项目表: ItemID CategoryID Status ------------------------------ 1 1 "New" 2
CategoryID Description
-------------------------
1 Red category
2 Green category
3 Blue category
和项目表:
ItemID CategoryID Status
------------------------------
1 1 "New"
2 1 "New"
3 1 "New"
4 2 "Editing"
5 2 "Editing"
6 2 "Editing"
7 3 "Published"
8 3 "Published"
9 3 "Published"
这来自一个遗留应用程序,我正在将其移植到一个新的代码库。我怀疑Item表上的Status列实际上应该在Category表上。如何验证没有与属于同一类别的任何其他项目具有不同状态的项目
我知道我想聚合具有相同CategoryID的项目,因此我尝试:
select categoryid
from item
group by categoryid
这给了我不同的分类。现在我想选择具有两种不同状态的:
select categoryid, count(status) > 1
from item
group by categoryid
having count(status) > 1
但这只是给出了每个类别中的项目数量。我对SQL很在行。@Koveras,这将为您提供具有多种状态的所有类别
SELECT *
FROM YourTable A
WHERE EXISTS(SELECT 1 FROM YourTable
WHERE CategoryId = A.CategoryId
AND [Status] <> A.[Status])
select categoryid
from (
select distinct categoryid, status
from item) t
group by categoryid
having count(*) > 1
您当前接受的解决方案将起作用,但效率较低。这是另一个解决方案
只需去掉itemid。。你会得到所有状态不同的类别。@samyi我认为这不对。请看上面最后一句。你的桌子是什么?物品?@Koveras好吧,你的桌子就是物品桌子,对吗。这是一种概括你答案的方法,因为首先你说你有一个分类表
select categoryid
from (
select distinct categoryid, status
from item) t
group by categoryid
having count(*) > 1