1

私はpostgresを使用していますが、T-SQLも知っているので、誰でも答えてくれれば感謝して変換することができます。自動車販売会社である私の会社のクエリを実行しようとしています。彼らは、主にORとWAで米国全土に車を販売しています. OR の新規および Wa の新規の売上を返すことができるレポートを作成する必要があります。問題は、OR または Wa 以外のすべての州の売上です。したがって、現在、1 つのクエリが WA 用で、もう 1 つのステートメントが OR 用である group by を使用してユニオンを実行しています。結果を非常にシンプルに表示し、3 行だけにしたいと考えています。1 OR 1 WA と 3 列目は他のすべての状態を組み合わせたものです。OR または WA と等しくないものを 1 つの値に結合する方法がわかりません。これは可能ですか?

ご覧いただきありがとうございます。

私のクエリには中古販売車も含まれますが、この問題を解決する方法を理解したらそれを統合できるので、クエリに複数のユニオンがあるのはそのためです

ここに私が今持っている私のクエリがあります:

SELECT buyerstate        AS "State", 
       Count(buyerstate) AS "Acura", 
       saletype          AS "N/U" 
FROM   lydeal 
WHERE  stocklocationid = '8' 
       AND buyerstate = 'OR' 
       AND saledate > '8/01/12' 
       AND saletype = 'N' 
GROUP  BY buyerstate, 
          stocklocationid, 
          saletype 
UNION 
SELECT buyerstate        AS "State", 
       Count(buyerstate) AS "Acura", 
       saletype          AS "N/U" 
FROM   lydeal 
WHERE  stocklocationid = '8' 
       AND buyerstate = 'OR' 
       AND saledate > '8/01/12' 
       AND saletype = 'U' 
GROUP  BY buyerstate, 
          stocklocationid, 
          saletype 
UNION 
SELECT buyerstate        AS "State", 
       Count(buyerstate) AS "Acura", 
       saletype          AS "N/U" 
FROM   lydeal 
WHERE  stocklocationid = '8' 
       AND buyerstate = 'WA' 
       AND saledate > '8/01/12' 
       AND saletype = 'N' 
GROUP  BY buyerstate, 
          stocklocationid, 
          saletype 
UNION 
SELECT buyerstate        AS "State", 
       Count(buyerstate) AS "Acura", 
       saletype          AS "N/U" 
FROM   lydeal 
WHERE  stocklocationid = '8' 
       AND buyerstate = 'WA' 
       AND saledate > '8/01/12' 
       AND saletype = 'U' 
GROUP  BY buyerstate, 
          stocklocationid, 
          saletype 
4

4 に答える 4

3

これを試して

SELECT CASE WHEN buyerstate IN ('OR','Wa') THEN buyerstate ELSE 'OTHER' END   AS "State", 
   Count(buyerstate) AS "Acura", 
   saletype          AS "N/U" 
FROM   lydeal 
WHERE  stocklocationid = '8' 
   AND saledate > '8/01/12' 
   AND saletype = 'N' 
GROUP  BY CASE WHEN buyerstate IN ('OR','Wa') THEN buyerstate ELSE 'OTHER' END, 
      stocklocationid, 
      saletype 
于 2012-08-28T17:37:24.960 に答える
1

CASE次の式を使用できます。

SELECT CASE WHEN buyerstate IN ('OR', 'WA')
            THEN buyerstate
            ELSE 'other'
        END AS OR_or_WA_or_other,
       ...
  FROM lydeal
 WHERE ...
 GROUP
    BY CASE WHEN buyerstate IN ('OR', 'WA')
            THEN buyerstate
            ELSE 'other'
        END,
       ...
 ORDER
    BY OR_or_WA_or_other
;

(実際には に変更できますが、新しい名前を使用OR_or_WA_or_otherするbuyerstate方が明確であると考えたので、どの場所が何を参照しているかが明確です。)

于 2012-08-28T17:32:55.007 に答える
1

私はあなたがこのようなことをすべきだと思います:

SELECT buyerstate        AS "State", 
       Count(buyerstate) AS "Acura",
       saletype          AS "N/U" 
FROM   lydeal 
WHERE  stocklocationid = '8' 
       AND (
          (buyerstate in ('OR', 'WA') AND saledate > '8/01/12' AND saletype in ('N', 'U')) OR //Only new sales for Or and Wa
          (buyerstate not in ('OR', 'WA')) //all other sales
       )
       AND saletype = 'N' 
GROUP  BY buyerstate, 
          stocklocationid, 
          saletype 
于 2012-08-28T17:37:12.203 に答える
0

次のようなことを試すことができます:

select buyerstate as "State",count(buyerstate) as "Acura", saletype as "N/U"
from lydeal
where stocklocationid = '8' and buyerstate = 'OR' and saledate > '8/01/12' and saletype = 'N'
group by buyerstate,stocklocationid,saletype
union

select buyerstate as "State",count(buyerstate) as "Acura", saletype as "N/U"
from lydeal
where stocklocationid = '8' and buyerstate = 'WA' and saledate > '8/01/12' and saletype = 'N'
group by buyerstate,stocklocationid,saletype

union
select 'Others' as "State",count(buyerstate) as "Acura", saletype as "N/U"
from lydeal
where stocklocationid = '8' and buyerstate <> 'WA' and buyerstate <> 'OR'  and saledate > '8/01/12' and saletype = 'N'
group by stocklocationid,saletype

3 番目の部分では、buyerstate の代わりに何かを使用し、グループを作成しないでください。

于 2012-08-28T17:30:58.977 に答える