1

以下のクエリは、データベースからレコードを取得してレポートに表示するために使用されます。しかし、SENOKO AND EUNOS 列には、すべての行で合計が重複して表示されます。これは、サブクエリがメインクエリに接続されていないため、フィルタリングが行われないようです。

SELECT whbal.customer, customer.imp_license_no, customer.psq_level, 
   (SELECT SUM(CONVERT(DECIMAL(8,3),(CONVERT(DECIMAL(8, 3), whbal.qty_good) + CONVERT(DECIMAL(8, 3), whbal.qty_slack)) * CONVERT(DECIMAL(8, 3), whbal.std_weight) / 1000)) 
    FROM whbal WHERE warehouse='SKW') AS SENOKO
   (SELECT SUM(CONVERT(DECIMAL(8,3),(CONVERT(DECIMAL(8, 3), whbal.qty_good) + CONVERT(DECIMAL(8, 3), whbal.qty_slack)) * CONVERT(DECIMAL(8, 3), whbal.std_weight) / 1000)) 
    FROM whbal WHERE warehouse='EKW') AS EUNOS
FROM customer 
INNER JOIN whbal ON whbal.customer=customer.customer AND whbal.date_create<=@date1                   
INNER JOIN stktype ON whbal.stock_type=stktype.stock_type
WHERE whbal.customer BETWEEN @cust1 AND @cust2 AND whbal.stock_type=@type
GROUP BY whbal.customer, customer.customer, customer.imp_license_no, customer.psq_level

結果:

ここに画像の説明を入力

問題と解決策が何であるかを知っている人はいますか?アドバイスとガイドをお願いします。前もって感謝します

4

1 に答える 1

1

これはおそらくあなたが望むものです:

SELECT whbal.customer, customer.imp_license_no, customer.psq_level, 
    SUM(CASE WHEN warehouse='SKW' 
        THEN CONVERT(DECIMAL(8, 3), whbal.qty_good) 
           + CONVERT(DECIMAL(8, 3), whbal.qty_slack) 
         * CONVERT(DECIMAL(8, 3), whbal.std_weight)
        ELSE 0.0 END
       / 1000.0) AS SENOKO,
    SUM(CASE WHEN warehouse='EKW' 
        THEN CONVERT(DECIMAL(8, 3), whbal.qty_good) 
           + CONVERT(DECIMAL(8, 3), whbal.qty_slack) 
         * CONVERT(DECIMAL(8, 3), whbal.std_weight)
        ELSE 0.0 END
       / 1000.0) AS EUNOS
FROM customer 
INNER JOIN whbal ON whbal.customer=customer.customer AND whbal.date_create<=@date1                   
INNER JOIN stktype ON whbal.stock_type=stktype.stock_type
WHERE whbal.customer BETWEEN @cust1 AND @cust2 AND whbal.stock_type=@type
GROUP BY whbal.customer, customer.customer, customer.imp_license_no, customer.psq_level
于 2013-11-04T02:16:44.980 に答える