1

フィールドの説明でグループ化するクエリがあります。(全部で 9 つの説明があります。) どうにかして、これらの説明のうち 3 つを 1 つのグループに結合し、合計 7 つの説明を作成する必要があります。私はSQLクエリにまったく慣れていないので、これまでJOINSとWHERE句以外のことについてかなり迷っています。助けてくれてありがとう。

SELECT        serviceclass.description, DATEPART(Year, meterread.readdate) AS Year, DATEPART(Month, meterread.readdate) AS Month, SUM(meterread.consumption) 
                     AS Consumption, COUNT(DISTINCT accountservice.account_id) AS Locations
FROM            accountservice INNER JOIN
                     serviceclass ON accountservice.serviceclass_id = serviceclass.serviceclass_id INNER JOIN
                     meterread ON accountservice.accountservice_id = meterread.accountservice_id
WHERE        (@Year = DATEPART(Year, meterread.readdate))
GROUP BY serviceclass.description, DATEPART(Year, meterread.readdate), DATEPART(Month,meterread.readdate)
ORDER BY Year, Month
4

2 に答える 2

0

通常は、ステートメントとステートメントcaseの両方に入るステートメントを使用してこれを行います。何かのようなもの:selectgroup by

select (case when serviceclass.description = 'A' then 'B'
             else serviceclass.description
        end) as description
       . . . -- fill in with query here
group by (case when serviceclass.description = 'A' then 'B'
             else serviceclass.description
           end), . . .  -- rest of query goes here
于 2013-08-13T20:20:12.230 に答える
0

CASEこれは、ステートメントを使用して実現できます。

and句を次のように置き換えserviceclass.desriptionますSELECTGROUP BY

CASE
    WHEN serviceclass.description IN ('Desc1','Desc2','Desc3')
        THEN 'JointDescription'
    ELSE serviceclass.description
END

また、Desc 1 ~ 3 を 3 つの説明で更新し、ジョイントの説明を希望どおりに更新します。

結果:

SELECT CASE
           WHEN serviceclass.description IN ('Desc1','Desc2','Desc3')
               THEN 'JointDescription'
           ELSE serviceclass.description
       END as description, 
       DATEPART(Year, meterread.readdate) AS Year,  
       DATEPART(Month, meterread.readdate) AS Month, 
       SUM(meterread.consumption) AS Consumption, 
       COUNT(DISTINCT accountservice.account_id) AS Locations
FROM accountservice 
INNER JOIN serviceclass ON accountservice.serviceclass_id = serviceclass.serviceclass_id 
INNER JOIN meterread ON accountservice.accountservice_id = meterread.accountservice_id
WHERE        (@Year = DATEPART(Year, meterread.readdate))
GROUP BY CASE
             WHEN serviceclass.description IN ('Desc1','Desc2','Desc3')
                  THEN 'JointDescription'
             ELSE serviceclass.description
         END, 
         DATEPART(Year, meterread.readdate), 
         DATEPART(Month,meterread.readdate)
ORDER BY Year, Month
于 2013-08-13T20:20:35.340 に答える