这是一个SQL Server问题,所以这里是我正在使用的表(注意:列NAME
是代码集的名称):
表:代码设置
CODE_SET_ID | NAME
-------------+-----------
1 | JACKETS
2 | PANTS
3 | SHIRTS
表:代码设置详情
CODE | DESCRIPTION | CODE_SET_ID
---------------+----------------+------------
BLUE | BLUE JACKET | 1
BLUE | BLUE JACKET | 1
GREEN | GREEN JACKET | 1
GREEN | GREEN JACKET | 1
PURPLE | PURPLE JACKET | 1
我写的查询当前发现所有重复的代码集代码以及代码集的代码集也属于。以下查询将返回
JACKETS, BLUE, 2
JACKETS, GREEN, 2
如何围绕以下查询包装另一个查询,以便我只获得JACKETS
?
SELECT
bcs.NAME, bcsd.CODE, bcsd.DESCRIPTION, COUNT(*)
FROM
CODE_SET_DETAIL as bcsd
INNER JOIN
CODE_SET as bcs ON bcsd.CODE_SET_ID = bcs.CODE_SET_ID
GROUP BY
bcs.NAME, bcsd.CODE, bcsd.DESCRIPTION
HAVING
COUNT(*) > 1
到目前为止,我已尝试使用WHERE EXISTS
,但结果集看起来不正确。
答案 0 :(得分:1)
WITH X (Name, Code, Description, DetailCount) AS (
SELECT bcs.NAME, bcsd.CODE, bcsd.DESCRIPTION, COUNT(*)
FROM CODE_SET_DETAIL as bcsd
INNER JOIN CODE_SET as bcs
ON bcsd.CODE_SET_ID = bcs.CODE_SET_ID
GROUP BY bcs.NAME, bcsd.CODE, bcsd.DESCRIPTION
HAVING COUNT(*) > 1
)
SELECT DISTINCT Name
FROM X
答案 1 :(得分:0)
如果你真的只想要"夹克"价值,为什么不添加" bcs.name ='夹克' "到你的HAVING子句并跳过整个外部查询,或者我错过了什么?