3

3 つの異なるステータス値に関する概要レポートを作成する必要があります。ステータスごとにカウントと金額の列があり、結果が 1 つのテーブルに表示されます。たとえば、出力は次のようになります。

ここに画像の説明を入力

(個々の出力で) コードの各行を生成するクエリは次のとおりです。

select case when status_key = '2' then 'Paid' else '' end as 'Status'
, COUNT(BillNo) as [Count]
, SUM(amtpd) as [Amount Paid]
from billtable 
where client = 101
and status_key = '2'
group by status_key

select case when status_key = '1' then 'Queued' else '' end as 'Status'
, COUNT(BillNo) as [Count]
, SUM(amtpd) as [Amount Paid]
from billtable 
where client = 101
and status_key = '1'
group by status_key

select case when status_key = '4' then 'Hold' else '' end as 'Status'
, COUNT(BillNo) as [Count]
, SUM(amtpd) as [Amount Paid]
from billtable 
where client = 101
and status_key = '4'
group by status_key

これにより、次のような 3 つの結果が生成されます。

ここに画像の説明を入力

SQL Server データベースと SSMS を使用してクエリを作成しています。

4

3 に答える 3

5

組合はいらない。

WHERE を使用して、必要な status_keys のみにフィルター処理し、CASE ステートメントを展開して数字から単語に再コーディングします。

select
  case when status_key = '2' then 'Paid'
       when status_key = '1' then 'Queued'
       when status_key = '4' then 'Hold'
                             else 'Error!' end     AS [Status],
  COUNT(BillNo)                                    AS [Count],
  SUM(amtpd)                                       AS [Amount Paid]
from
  billtable
where
  client = 101
  AND status_key IN ('1','2','4')
group by
  status_key

EDIT寸法表を使用した修正例

select
  status.description                                    AS [Status],
  COUNT(bill_table.BillNo)                              AS [Count],
  SUM(bill_table.amtpd)                                 AS [Amount Paid]
from
  billtable
inner join
  status
    on billtable.status_key = status.key
where
      bill_table.client      = 101
  AND bill_table.status_key IN ('1','2','4')
group by
  status.description

status次に、からへの外部キー制約を設定できbilltableます。billtableこれにより、 に対応するキーがない限り、 にデータを挿入できなくなりますstatus

その後、ルックアップは常に機能します。statusただし、テーブルが正しく設定されていない場合、挿入が失敗するという「代償」があります。

これfact-tabledimension-table構築は、リレーショナル データベース設計の基盤です。

于 2012-09-28T12:58:23.453 に答える
1

あなたはすべてを結合する必要があります

your first query
Union all
your Second query
union all
your third query
于 2012-09-28T12:41:35.740 に答える
0

クエリ間に UNION を追加するだけです。

于 2012-09-28T12:42:40.953 に答える