1

テーブルの構造を以下に示します。最初のテーブルはsubusageで、次のテーブルはmachinesubusageです。どちらもsub_usage_id列に関連付けられています。subusage.product_keyとそれに関連する使用回数を選択する必要があります。subusage.is_standaloneがnullでない場合は、subusage.usage_countから関連付けられた使用回数を取得する必要があります。そうでない場合、関連付けられた使用回数は、そのsub_usage_idのmachinesubusageテーブルの行数になります。以下の両方の場合についてクエリを作成しました。これらの2つのクエリを組み合わせるためにcaseとifステートメントを試しましたが、無駄でした

SELECT SU.product_key,COUNT(*) FROM SubUsage SU
INNER JOIN MachineSubUsage MSU ON MSU.sub_usage_id = SU.sub_usage_id
WHERE SU.acct_id = 40897342 GROUP BY SU.product_key

SELECT SU.product_key, SU.usage_count FROM SubUsage SU
INNER JOIN MachineSubUsage MSU ON MSU.sub_usage_id = SU.sub_usage_id
WHERE SU.acct_id = 40897342 GROUP BY SU.product_key, SU.usage_count

テーブルの構造:

ここに画像の説明を入力してください

4

3 に答える 3

1

これを試して:

SELECT 
  SU.product_key,
  SUM(CASE 
        WHEN su.is_standalone IS NOT NULL THEN su.usage_count
        ELSE MSU.SubUsageCount
      END) AS TotalCount
FROM SubUsage SU
INNER JOIN
(
   SELECT sub_usage_id, COUNT(*) AS SubUsageCount
   FROM  MachineSubUsage
   GROUP BY sub_usage_id
) AS MSU ON MSU.sub_usage_id = SU.sub_usage_id
WHERE SU.acct_id = 40897342 
GROUP BY SU.product_key;

他のテーブルに一致しないプロダクト キーを含める必要がある場合は、LEFT JOIN代わりに withISNULL()を使用して null をゼロに置き換えます。

SELECT 
  SU.product_key,
  SUM(CASE 
        WHEN su.is_standalone IS NOT NULL THEN su.usage_count
        ELSE ISNULL(MSU.SubUsageCount, 0)
      END) AS TotalCount
FROM SubUsage SU
LEFT JOIN
(
   SELECT sub_usage_id, COUNT(*) AS SubUsageCount
   FROM  MachineSubUsage
   GROUP BY sub_usage_id
) AS MSU ON MSU.sub_usage_id = SU.sub_usage_id
WHERE SU.acct_id = 40897342 
GROUP BY SU.product_key;
于 2013-02-18T12:54:19.007 に答える
0

Mahmoud Gamal は、良い答えと思われるものを投稿しました。amit のコメントで、元の case ステートメントで何が問題になったのかを説明します。ここにあります:

SELECT SU.product_key
, CASE WHEN SU.is_standalone IS NOT NULL THEN SU.usage_count ELSE COUNT(*) END 
FROM SubUsage SU INNER JOIN MachineSubUsage MSU ON MSU.sub_usage_id = SU.sub_usage_id 
WHERE SU.acct_id = 40897342 
GROUP BY SU.product_key, SU.usage_count 

エラー メッセージに表示されるはずだった問題は、SU.is_standalone が select 句に含まれているが、group by 句には含まれていないことです。実際、その簡単な修正を行えば、求めていた答えが得られるかもしれません。

于 2013-02-18T14:10:31.323 に答える
0

SQLServer2005+ では、このリクエストを試してください

SELECT DISTINCT SU.product_key, SU.usage_count, 
       COUNT(*) OVER(PARTITION BY SU.product_key) 
FROM SubUsage SU JOIN MachineSubUsage MSU ON MSU.sub_usage_id = SU.sub_usage_id
WHERE SU.acct_id = 40897342
于 2013-02-18T13:35:52.123 に答える