2017-12-27 18 views
1

売上高、売上高、平均販売価格、市場の日数の中央値、各月の中央値の販売価格を取得しようとしています。下記のクエリーを通じて販売データから年:SUM、AVG、COUNT件の結果が必要です。月別にグループ化されています

SELECT CAST(MNTH AS VARCHAR(2)) +'-'+ CAST(YR AS VARCHAR(4)) AS 'MONTH-YEAR', YR, MNTH, 
    MAX(dol_vol) AS 'Dol. Vol.', 
    MAX(no_sales) AS '# of Sales', 
    MAX(avg_price) AS 'Average Price', 
    MAX(med_price) AS 'Median Price', 
    MAX(med_days) AS 'Median Days' 
FROM (SELECT YEAR(dt) YR, MONTH(dt) MNTH, 
    SUM(sale_price) dol_vol, 
    COUNT(sale_price) no_sales, 
    AVG(sale_price) avg_price, 
    PERCENTILE_CONT(.50) WITHIN GROUP (ORDER BY sale_price) OVER (PARTITION BY year(dt), month(dt)) med_price, 
    PERCENTILE_CONT(.50) WITHIN GROUP (ORDER BY days_mkt) OVER (PARTITION BY year(dt), month(dt)) med_days 
    FROM Sales_Data 
    WHERE status='sld' AND year(dt)>='2000' AND sale_price>1000) d 
GROUP BY YR, MNTH 
ORDER BY YR, MNTH; 

をしかし、私は以下のようなエラーが取得しています:私は「DT」は列に対して条件、GROUP BYを追加しようとした場合、今

Msg 8120, Level 16, State 1, Line 7 
Column 'Sales_Data.dt' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. 

をサブクエリでは、sales_priceカラムとdays_mktカラムについても同じエラーが発生します。どのように私は解像度

答えて

1

はこれを試してみてください得るか:

SELECT CAST(MNTH AS VARCHAR(2)) +'-'+ CAST(YR AS VARCHAR(4)) AS 'MONTH-YEAR', YR, MNTH, 
    MAX(dol_vol) AS 'Dol. Vol.', 
    MAX(no_sales) AS '# of Sales', 
    MAX(avg_price) AS 'Average Price', 
    MAX(med_price) AS 'Median Price', 
    MAX(med_days) AS 'Median Days' 
FROM 
(
    SELECT YEAR(dt) YR, MONTH(dt) MNTH, 
    NULL dol_vol, 
    NULL no_sales, 
    NULL avg_price, 
    PERCENTILE_CONT(.50) WITHIN GROUP (ORDER BY sale_price) OVER (PARTITION BY year(dt), month(dt)) med_price, 
    PERCENTILE_CONT(.50) WITHIN GROUP (ORDER BY days_mkt) OVER (PARTITION BY year(dt), month(dt)) med_days 
    FROM Sales_Data 
    WHERE status='sld' AND year(dt)>='2000' AND sale_price>1000 

    UNION ALL 

    SELECT YEAR(dt) YR, MONTH(dt) MNTH, 
    SUM(sale_price) dol_vol, 
    COUNT(sale_price) no_sales, 
    AVG(sale_price) avg_price, 
    NULL, 
    NULL 
    FROM Sales_Data 
    WHERE status='sld' AND year(dt)>='2000' AND sale_price>1000 
    GROUP BY YEAR(dt) 
      ,MONTH(dt) 

) d 
GROUP BY YR, MNTH 
ORDER BY YR, MNTH; 

を私たちはどの列/値によって、グループにエンジンを教えて正確に必要な内部クエリで。

関連する問題