2016-06-22 4 views
3

2つの列のペア(TransactionType, ClientId)が複数回ユニークである場合にのみ、以下のような表から集計結果を表示する必要があります。SQL Server show results 1より大きい別の列の数

私の現在のクエリ

SELECT 
    SUM(OrderQty), ClientId, OrderId 
FROM 
    Table 
GROUP BY 
    ClientId, TransactionType 
HAVING 
    COUNT(DISTINCT(TransactionType, ClientId)) > 1 

出力:

TransactionType ClientId Product OrderQty 
-------------------------------------------- 
123    A01  Apples  10 
123    A22  Apples  20 
222    A01  Book  20 
222    A01  Car  20 
555    A09  Book  20 
555    A09  Oranges 20 
999    A01  Apples  10 
999    A22  Apples  20 

所望の出力

TransactionType ClientId Product OrderQty 
-------------------------------------------- 
123    A01  Apples  10 
123    A22  Apples  20 
999    A01  Apples  10 
999    A22  Apples  20 
+1

いただきました権利である実際にあなたの現在のクエリ –

+0

と間違って - 質問のタイトルや所望の出力? –

+0

私はあなたを混乱させて申し訳ありません。私は私のタイトルと私の希望する出力が矛盾しているとは思えません:(しかし、希望の出力は私の必要なものです。 1回より – ct14

答えて

3

あなたの現在のクエリに似た派生テーブルを使用し、それに参加することができます結果の元のテーブルに:

SELECT s.* FROM YourTable s 
INNER JOIN (SELECT t.transactionType , t.product 
      FROM YourTable t 
      GROUP BY t.transactionType , t.product having COUNT(*) > 1) ss 
ON(s.transactionType = t.transactionType and s.product = t.product) 

これにより、予想される出力が得られます。

1
SELECT 
    t.TransactionType, 
    t.ClientId, 
    t.Product, 
    t.OrderQty 
FROM 
    Table t 
JOIN 
    (SELECT 
     ClientId, 
     TransactionType 
    FROM 
     Table 
    GROUP BY 
     ClientId, 
     TransactionType 
    HAVING 
     COUNT(*) > 1) AS a 
ON t.ClientId = a.ClientId 
AND t.TransactionType = a.TransactionType 
2

希望の出力を見ます(実際にタイトルと矛盾しています)。

SELECT ClientId,TransactionType, Min(OrderId) as OrderId, Min(OrderQty) as OrderQty 
FROM Table 
GROUP BY ClientId,TransactionType 
HAVING COUNT(*) = 1 
1
-- Temp table with the example data 
IF OBJECT_ID('tempdb..#Tbl') IS NOT NULL 
     DROP TABLE #Tbl 

SELECT A.* 
INTO #Tbl 
FROM 
(
SELECT 123 TransactionType, 'A01' ClientId, 'Apples' Product, 10 OrderQty 
UNION SELECT 123,'A22','Apples',20 
UNION SELECT 222,'A01','Book',20 
UNION SELECT 222,'A01','Car',20 
UNION SELECT 555,'A09','Book',20 
UNION SELECT 555,'A09','Oranges',20 
UNION SELECT 999,'A01','Apples',10 
UNION SELECT 999,'A22','Apples',20 
) A 


-- Requested query 

SELECT 
B.TransactionType 
,B.ClientId 
,B.Product 
,B.OrderQty 
FROM 
(
SELECT 
T.TransactionType 
,T.ClientId 
,T.Product 
,T.OrderQty 
,COUNT(1) OVER(PARTITION BY T.TransactionType,T.ClientId) N 
FROM #Tbl T 
) 
B 
WHERE B.N = 1 
関連する問題