0

2つのテーブルがあります。

  1. Customer ID, NAME, MonthlyIncome
  2. Orders ID, CustomerKey, TotalCost

店頭で合計金額を購入するように、この2つのテーブルを1つにまとめたいと思います。

CustomerKey, MonthlyIncome, TotalCost.

でグループ化しようとしましたCustomerKeyが、残りの列を含めることができません。どのクエリを使用する必要がありますか?

SELECT 
    fs.CustomerKey, SUM(fs.TotalCost) as TotalBought
FROM 
    FactOnlineSales fs
INNER JOIN 
    DimCustomer c on c.CustomerKey = fs.CustomerKey
GROUP BY 
    fs.CustomerKey
4

3 に答える 3

1

結合のON句にエラーがある可能性があります。テーブルからではなく
使用しました。グーピングの場合:集計しないすべての列でグループ化する必要があるため、(説明的な顧客を持つことができるように)とを 含めることができます。CustomerKeyCustomer IDDimCustomerNAMEMonthlyIncome

SELECT 
    c."Customer ID",
    c.NAME, 
    c.MonthlyIncome,
    SUM(fs.TotalCost) as TotalBought
FROM 
    FactOnlineSales fs INNER JOIN DimCustomer c 
    on c."Customer ID" = fs.CustomerKey
GROUP BY 
    c."Customer ID",
    c.NAME,
    c.MonthlyIncome
于 2013-03-17T09:40:21.377 に答える
1

使用している SQL Server のバージョンについては言及していませんが、SQL Server 2005以降を使用している場合は、次のOVER()句を使用できます。

SELECT 
    fs.CustomerKey, 
    c.MonthlyIncome,
    TotalBought = SUM(fs.TotalCost) OVER(PARTITION BY fs.CustomerKey)
FROM 
    FactOnlineSales fs
INNER JOIN 
    DimCustomer c on c.CustomerKey = fs.CustomerKey

これにより、基本的に 、 が得られCustomerKey、次にfor each がMonthlyIncome合計され、出力に適切な値が表示されます。この場合はする必要はありませんTotalCostCustomerKeyGROUP BY

于 2013-03-17T09:28:24.027 に答える
1

CustomerKey でグループ化しようとしましたが、残りの列を含める方法を管理できませんでした。

ただそれをしてください

SELECT fs.CustomerKey,
       c.MonthlyIncome,
       SUM(fs.TotalCost) as TotalBought
  FROM FactOnlineSales fs
       INNER JOIN DimCustomer c
         ON c.CustomerKey = fs.CustomerKey
 GROUP BY fs.CustomerKey,
          c.MonthlyIncome

おそらくCustomerKey一意であるため、一意性の低い列でグループ化してもSUM合計は変わりません。

于 2013-03-17T05:15:52.887 に答える