0

次の SQL は、私が望んでいることをほぼ正確に実行します。

SELECT p.ProductNumber "Plan Number",
       p.Name,
       p.price         "Monthly Rate",
       count(*)        "Group",
       '0'             "Direct Debit"
FROM   contact c,
       product p
WHERE  c.integ_schemeid = p.ProductId
       AND c.ParentCustomerId IS NOT NULL
GROUP  BY p.ProductNumber,
          p.Name,
          p.price
UNION
SELECT p.ProductNumber "Plan Number",
       p.Name,
       p.price         "Monthly Rate",
       '0'             "Group",
       count(*)        "Direct Debit"
FROM   contact c,
       product p
WHERE  c.integ_schemeid = p.ProductId
       AND c.ParentCustomerId IS NULL
GROUP  BY p.ProductNumber,
          p.Name,
          p.price 

結果:

ここに画像の説明を入力

グループと口座引落しの値を 1 つの行にまとめて、プランごとに 1 つの行が必要です。

これは T-SQL で可能ですか?

4

2 に答える 2

2

試す

select p.ProductNumber "Plan Number",p.Name,p.price "Monthly Rate",
    count(CASE WHEN c.ParentCustomerId IS NOT NULL THEN 1 END) "Group", 
    count(CASE WHEN c.ParentCustomerId IS NULL THEN 1 END) "Direct Debit"
from contact c,product p 
where c.integ_schemeid = p.ProductId
group by p.ProductNumber,p.Name,p.price

が失敗するとCASE WHEN、 はCASEを返しNULL、値COUNTを「カウント」しませんNULL。は1ランダムな値です。「ないNULL」という意味だけです。'X''Foo'0-1...を使用できます。

于 2013-09-10T09:40:47.627 に答える