这是一个复杂的问题,请耐心等待。所以我有下表:
babel-plugin-transform-class-properties
我希望显示位置为加利福尼亚州的每个MasterID,SubID和Location。但是,这就是问题所在。 我不希望显示这些内容,除非在每个MasterID中,每个SubID都有加州位置。
如果MasterID = 100,我不希望显示任何内容,因为在该MasterID中有一个拥有自己的SubID的Texas。
如果MasterID = 99,我希望显示所有3列,因为尽管在该MasterID下有德克萨斯州,但在同一个子ID中也有一个加利福尼亚州。
98不好,因为它的子ID只包含德州。
97是好的,因为它只是加利福尼亚州。
所需的表结果如下:
╔══════════╦═══════╦════════════╗
║ MasterID ║ SubID ║ Location ║
╠══════════╬═══════╬════════════╣
║ 100 ║ 50 ║ California ║
║ 100 ║ 45 ║ Texas ║
║ 100 ║ 40 ║ California ║
║ 99 ║ 29 ║ California ║
║ 99 ║ 28 ║ Texas ║
║ 99 ║ 28 ║ California ║
║ 98 ║ 15 ║ Texas ║
║ 98 ║ 15 ║ Texas ║
║ 97 ║ 5 ║ California ║
╚══════════╩═══════╩════════════╝
(删除99 ...... 28 .....德克萨斯也很好)
答案 0 :(得分:3)
这应该做:
SELECT A.*
FROM dbo.YourTable A
INNER JOIN (SELECT MasterID,
COUNT(DISTINCT SubID) SubIDs,
COUNT(DISTINCT CASE WHEN Location = 'California' THEN SubID END) CaliforniaSubIDs
FROM dbo.YourTable
GROUP BY MasterID) B
ON A.MasterID = B.MasterID
WHERE B.SubIDs = B.CaliforniaSubIDs;
Here 您可以看到正在运行的查询。结果是:
╔══════════╦═══════╦════════════╗
║ MasterID ║ SubID ║ Location ║
╠══════════╬═══════╬════════════╣
║ 97 ║ 5 ║ California ║
║ 99 ║ 29 ║ California ║
║ 99 ║ 28 ║ Texas ║
║ 99 ║ 28 ║ California ║
╚══════════╩═══════╩════════════╝
<强>更新强>
要执行您在评论中说明的内容,您可以使用:
WITH CTE AS
(
SELECT A.*,
RN = ROW_NUMBER() OVER(PARTITION BY MasterID, SubID
ORDER BY CASE WHEN Location LIKE '%Cali%'
OR Location LIKE '%fornia%' THEN 1 ELSE 2 END,
Location)
FROM dbo.YourTable A
INNER JOIN (SELECT MasterID,
COUNT(DISTINCT SubID) SubIDs,
COUNT(DISTINCT CASE WHEN Location = 'California' THEN SubID END) CaliforniaSubIDs
FROM dbo.YourTable
GROUP BY MasterID) B
ON A.MasterID = B.MasterID
WHERE B.SubIDs = B.CaliforniaSubIDs;
)
SELECT MasterID, SubID, Location
FROM CTE
WHERE RN = 1;