计算唯一记录所需的查询帮助

时间:2015-06-24 09:59:04

标签: sql-server count distinct

我有以下数据结构,我试图找到唯一ID,其中值字母值等于到A和B(即选择ID = 1,但不是ID = 3或5)。 并且还找到唯一ID,其中值AlphaBets值包含两者 A和B(即选择ID = 1,3和5)。

.tile_nav li ul {
    display:none;
    margin: 0 2px 2px;
}

1 个答案:

答案 0 :(得分:2)

这应该做:

╔═══╦════════════╦═════════════╗
║   ║ ID         ║ Alphabets   ║
╠═══╬════════════╬═════════════╣
║ 1 ║ 1          ║ A           ║
║ 1 ║ 1          ║ B           ║
║ 4 ║ 2          ║ B           ║
║ 5 ║ 2          ║ D           ║
║ 6 ║ 3          ║ A           ║
║ 7 ║ 3          ║ B           ║
║ 8 ║ 3          ║ D           ║
║ 9 ║ 4          ║ A           ║
║ 10║ 4          ║ C           ║
║ 11║ 5          ║ A           ║
║ 12║ 5          ║ B           ║
║ 13║ 5          ║ C           ║
║ 14║ 5          ║ D           ║
╚═══╩════════════╩═════════════╝

CREATE TABLE dbo.Alphabets(
ID int NOT NULL
,Alphabets char(1) NOT NULL
,CONSTRAINT PK_Alphabets PRIMARY KEY (ID, Alphabets)
);


INSERT INTO dbo.Alphabets VALUES
 (1, 'A')
,(1, 'B')
,(2, 'B')
,(2, 'D')
,(3, 'A')
,(3, 'B')
,(3, 'D')
,(4, 'A')
,(4, 'C')
,(5, 'A')
,(5, 'B')
,(5, 'C')
,(5, 'D');

还有许多其他方法可以完成任务,但这是最简单的方法之一。

单次传递中更加模糊(但更有效)的解决方案使用聚合和CASE表达式:

SELECT ID
FROM Alphabets
WHERE Alphabets IN ('A','B')

EXCEPT

SELECT ID
FROM Alphabets
WHERE Alphabets NOT IN ('A','B')