2011-05-17 64 views
0

我有一個具有以下字段的表:需要協助建立SQL查詢單個表

ID 
brandID 
productID 

我想知道不同brandIDs多少有至少一條記錄在此表的productID 1和的productID 2兩例如:

ID|brandID|productID 
1 | 1  | 1 
2 | 1  | 2 
3 | 1  | 2 
4 | 2  | 2 
5 | 3  | 1 
6 | 3  | 1 

在上述試樣臺,只有brandID 1具有1的productID和2的productID brandIDs 2和3行只有一個產品或其他。

如何構建一個查詢以獲得包含productID 1和2的不同brandID的計數?

回答

3
select COUNT(*) 
from (
    select brandID 
    from MyTable 
    where productID in (1, 2) 
    group by brandID 
    having count(distinct productID) = 2 
) a 
+1

這是不是返回3呢? – 2011-05-17 17:59:02

+0

@Abe,我認爲'有計數'中的'distinct'可以解決這個問題。 – chezy525 2011-05-17 18:09:51

+0

@Abe有一個錯誤,它是固定的... – RedFilter 2011-05-17 18:10:47

0

如果您的表被命名爲T,它應該是這樣的:

select count(distinct t1.brandID) 
from t t1, t t2 
where t1.brandID = t2.brandID and t1.productID = 1 and t2.productID = 2 
0

使用子選擇來獲得不同的brandIDproductID=1,然後拿到計數:

SELECT COUNT(DISTINCT(brandID)) FROM tbl WHERE brandID IN (SELECT DISTINCT brandID FROM tbl WHERE productID=1) AND productID=2;

+0

謝謝,這對我有用!我很欣賞這裏的所有快速答案。 – user757879 2011-05-17 18:40:54

0
select distinct brandid, count(1) from sampletable 
where productid in (1, 2) 
group by brandid having count(1) > 1 
+0

這不會返回3嗎? – 2011-05-17 17:58:31

+0

哎呦,我是壞人。代碼猴答案出錯了! – 2011-05-17 18:19:40

0

爲SQL Server 2005及以上:

DECLARE @t TABLE(ID INT, brandID INT, productID INT) 
INSERT INTO @t 
SELECT 1, 1, 1 UNION ALL 
SELECT 2, 1, 2 UNION ALL 
SELECT 3, 1, 2 UNION ALL 
SELECT 4, 2, 2 UNION ALL 
SELECT 5, 3, 1 UNION ALL 
SELECT 6, 3, 2 UNION ALL 
SELECT 7, 3, 4 UNION ALL 
SELECT 8, 3, 5 

SELECT * FROM @t  

;WITH cte 
AS 
(
    SELECT ROW_NUMBER() OVER(PARTITION BY brandID ORDER BY productID) AS RN, * 
    FROM @t 
    WHERE productID IN (1,2) 
) 
SELECT DISTINCT brandID 
FROM cte 
WHERE RN > 1 
0

這是我會做:

select distinct brandid from t 
where brandid in (select distinct brandid from t where productid = 1) 
and brandid in (select distinct brandid from t where productid = 2)