1

私はこれをいじっていて、誰かが私の問題を解決する賢い方法を持っているかもしれないと思っていました. カテゴリ メンバーシップごとに売上を照会しており、顧客が 1 つの売上カテゴリのメンバーである場合は、すべての売上を集計する必要があります。例えば:

Cust  Category   Sale
 A      Pie        3
 A      Cake       5
 B      Pie        4
 C      Cake       8
 C      Limes      1

この例では、カテゴリ = 'Cake' のいずれかの総売上を取得したいので、次のようになります。

Cust   Sale
 A       8
 C       9

私は 2 つのクエリ (またはサブクエリ) を書いてきましたが、欠けている直接的なアプローチがあるかどうか疑問に思いました。もちろん、実際のデータはもっと複雑ですが、これが私が達成したいことの要点です。サブクエリなしでこれを効率的に行う方法について何か考えはありますか?

4

4 に答える 4

0
Select A.Cust, A.Category, B.SumSale
from Sales A
Where A.Category like '%Cake%'
Left Join
(Select Cust, Category, Sum(Sale) as SumSale
from Sales 
Group By Cust, Category) B
On B.Cust = A.Cust
于 2013-07-11T19:29:35.287 に答える
0

CTE でも可能です。

WITH cte AS
(
  SELECT Cust FROM demo
  WHERE Category = 'Cake'
)
SELECT cte.Cust, SUM(Sale) AS Sales FROM demo
JOIN cte ON cte.Cust = demo.Cust
GROUP BY cte.Cust
于 2013-07-11T19:32:00.933 に答える
0

EXISTS 演算子を WHERE 句の相関サブクエリで使用できます

SELECT t1.Cust, SUM(t1.Sale) AS Sale
FROM dbo.test134 t1
WHERE EXISTS (
              SELECT 1
              FROM dbo.test134 t2
              WHERE t1.Cust = t2.Cust
                AND t2.Category = 'Cake'
              )
GROUP BY t1.Cust

または、SQLServer2005+ の OVER 句を使用した集計関数

;WITH cte AS
 (
  SELECT Cust, Category, SUM(Sale) OVER(PARTITION BY Cust) AS Sale
  FROM dbo.test134
  )
  SELECT *
  FROM cte
  WHERE Category = 'Cake'

両方のクエリのデモを見るSQLFiddle

于 2013-07-11T19:35:49.653 に答える
-1

何かのようなもの:

SELECT Category, Sum(Sales) AS [Sale Totals]
FROM tblSales
GROUP BY Category

編集: これは、「ケーキ」だけでなく、すべてのカテゴリでグループ化する場合に使用します。編集2:ただし、単一のカテゴリのみが必要な場合は、単純なものを追加するだけです:

WHERE Category = 'Cake'

FROM 行と GROUP BY 行の間。

于 2013-07-11T19:30:11.710 に答える