0

ステートメントを含むクエリがあり、エイリアスCASEに対して実行する必要があります。GROUP BYそれができないことはわかっているので、サブクエリを使用しようとしましたが、機能していません。

これが私が取り組んでいたクエリです:

SELECT
    a.Vendor,
    a.Month_Sold
    --SUM(sd.SBQSHP) AS Sales_Qty,
    --SUM(sd.SBEPRC) AS Sales_Dlr
FROM
(SELECT
    sd.IFPRVN AS Vendor,
    vn.ACNAME AS Vendor_Name,
    CASE
        WHEN sd.SBINDT BETWEEN '2012-07-30' AND '2012-08-26' THEN 'August 2012'
        WHEN sd.SBINDT BETWEEN '2012-08-27' AND '2012-09-30' THEN 'September 2012'
        WHEN sd.SBINDT BETWEEN '2012-10-01' AND '2012-10-28' THEN 'October 2012'
        WHEN sd.SBINDT BETWEEN '2012-10-29' AND '2012-11-25' THEN 'November 2012'
        WHEN sd.SBINDT BETWEEN '2012-11-26' AND '2012-12-31' THEN 'December 2012'
        WHEN sd.SBINDT BETWEEN '2013-01-01' AND '2013-01-27' THEN 'January 2013'
        WHEN sd.SBINDT BETWEEN '2013-01-28' AND '2013-02-24' THEN 'Febuary 2013'
        WHEN sd.SBINDT BETWEEN '2013-02-25' AND '2013-03-31' THEN 'March 2013'
    END AS Month_Sold
FROM
    dbo.SalesData sd
    INNER JOIN dbo.S2K_VEND vn ON vn.ACVEND = sd.IFPRVN
WHERE
    sd.SBINDT > '2012-07-29'
AND
    sd.SBCLS IN ('1500')
AND
    sd.SBDIV NOT IN ('4000')
)a
GROUP BY
    a.Vendor,
    a.Month_Sold
ORDER BY
    a.Vendor,
    a.Month_Sold

コメントアウトされた 2 つの列は、何らかの方法で含める必要があります。助言がありますか?

4

2 に答える 2

1

実際、日付出力にきれいなラベルを付けるのは、プレゼンテーション層の仕事です。FORMAT()C# などではかなり強力です。それを除けば、最後の可能なポイントまできれいな文字列ラベルに変換しないでください。これには、もう 1 つのレイヤーが必要になります。

SELECT 
  Vendor, 
  DATENAME(MONTH, Month_Sold) + ' ' + RTRIM(YEAR(Month_Sold)),
  Sales_Qty,
  Sales_Dlr
FROM
(
  SELECT
    Vendor,
    Month_Sold,
    SUM(SBQSHP) AS Sales_Qty,
    SUM(SBEPRC) AS Sales_Dlr
  FROM
  (
    SELECT
      sd.IFPRVN AS Vendor,
      vn.ACNAME AS Vendor_Name, -- why is this here?
      CASE
        WHEN sd.SBINDT BETWEEN '2012-07-30' AND '2012-08-26' THEN '2012-08-01'
        WHEN sd.SBINDT BETWEEN '2012-08-27' AND '2012-09-30' THEN '2012-09-01'
        ...
        WHEN sd.SBINDT BETWEEN '2013-01-28' AND '2013-02-24' THEN '2013-02-01'
        WHEN sd.SBINDT BETWEEN '2013-02-25' AND '2013-03-31' THEN '2013-03-01'
      END AS Month_Sold
    FROM dbo.SalesData sd
      INNER JOIN dbo.S2K_VEND vn 
      ON vn.ACVEND = sd.IFPRVN
    WHERE sd.SBINDT > '2012-07-29'
    AND sd.SBCLS IN ('1500')
    AND sd.SBDIV NOT IN ('4000')
  ) AS a
  GROUP BY Vendor, Month_Sold
) AS b
ORDER BY
    Vendor,
    Month_Sold;
于 2013-03-26T22:03:50.290 に答える
0

エイリアス「a」を使用して、サブクエリで集計する必要がある値を選択するだけです

サブクエリ "a" select ステートメントに追加します。

SELECT    
    sd.IFPRVN AS Vendor,
    vn.ACNAME AS Vendor_Name,
    sd.SBQSHP,
    sd.SBEPRC
    CASE
        ...

最上位の select ステートメントで SUM ステートメントのコメントを外しますが、エイリアスを "sd" から "a" に変更します

SUM(a.SBQSHP) AS Sales_Qty,
SUM(a.SBEPRC) AS Sales_Dlr
于 2013-03-27T00:34:01.570 に答える