1

クエリのデータをグループごとに 1 つの行にフラット化しようとしています。CASE ステートメントを使用するとこれが達成されると思いましたが、それでも結果は別々の行に配置されます。また、Group By 句で CASE ステートメントを使用しています。

    Actual Results:                     Desired Result:
    aonBom                      Fees    aonBom                      Fees
    AA201   D02440120105        9.00    AA201   D02440120105        15.00
    AA201   D02440120105        6.00    AA201   D14251210105        9.00
    AA201   D14251210105        9.00    AA201   D16007120115        9.00
    AA201   D16007120115        9.00    AA702   D02440120110        15.00
    AA702   D02440120110        9.00
    AA702   D02440120110        6.00

私の現在のSQL文は次のとおりです。

SELECT
    CASE a.productid
        WHEN 6 THEN a.productid + space(2) + a.cusotmerid + p.progcode+ w.level 
        WHEN 7 THEN a.productid + space(1) + a.cusotmerid + p.progcode+ w.level
        ELSE a.productid + space(3) + a.cusotmerid + p.progcode + w.level
    END AS aonBom,  
    CASE        
        WHEN (s.sku IN('80-53-0000', '80-52-TTSB')
            or s.sku BETWEEN '90-00-0000' AND '90-00-9999')
        THEN sum(s.retail)
    END as Fees
FROM
    l
        INNER JOIN item ON l.product = i.prime
        INNER JOIN item AS s ON l.compon =s.prime
        INNER JOIN a ON i.prime = a.product
        INNER JOIN p ON a.program = p.prime
        INNER JOIN w ON a.award = w.prime
        INNER JOIN c ON p.customerid = c.prime
WHERE
    c.active = 'Active'
    AND p.status = 'Active'
GROUP BY    
    CASE a.productid
        WHEN 6 THEN a.productid + space(2) + a.cusotmerid + p.progcode+ w.level 
        WHEN 7 THEN a.productid + space(1) + a.cusotmerid + p.progcode+ w.level
        ELSE a.productid + space(3) + a.cusotmerid + p.progcode + w.level
    END,
    s.sku,
    c.active, 
    p.status
HAVING
    s.sku IN ('80-53-0000', '80-52-TTSB') OR
    (s.sku BETWEEN '90-00-0000' AND '90-00-9999')
ORDER BY
    aonBom

CASE ステートメントを使用することがデータを平坦化する方法であるというウェブ上のいくつかの記事を準備しましたが、ここで何が間違っているのかわかりません。

4

1 に答える 1