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