1

私はジャーナルと呼ばれる単一のテーブルを持っています。日誌には 4 つの列があります。

  1. 日付(日付)
  2. アカウント(int)
  3. Type(varchar(1) (文字 D または C を受け入れることができます)
  4. 金額(decimal(18,2))

ジャーナル

Date         Account    Amount    Type
2012-05-31   20001      300       D
2012-05-31   20002      700       C
2012-05-31   20003      600       D
2012-05-31   20004      900       C

タイプ列は、D または C の 2 種類の文字値のみを取ることができます。したがって、結果の列が次のようになるように、4 つの列を提供するクエリが必要です。

Date        Account       D       C
2012-05-31  200101        300     0
2012-05-31  200102        0       700
2012-05-31  200103        600     0
2012-05-31  200104        0       900

D 列と C 列には、null かどうかに関係なく、Amount の値が入力されます。

4

3 に答える 3

3

あなたはPIVOTでこれを達成することができます:

create table journal
(
    date datetime,
    account int,
    amount money,
    type varchar(1)
)

insert into journal values ('05/31/12', 20001, 300, 'D')
insert into journal values ('05/31/12', 20002, 700, 'C')
insert into journal values ('05/31/12', 20003, 600, 'D')
insert into journal values ('05/31/12', 20004, 900, 'C')

select date
    , account
    , isnull([D], 0) as D
    , isnull([C], 0) as C
from 
(
    select *
    from journal
) x
pivot
(
    sum(amount)
    for type in ([D], [C])
) p

drop table journal

デモ付きのSQLフィドルを見る

アカウント名を結合する場合は、そのテーブルでJOINを実行する必要があります。デモでSQLFiddleを更新するを参照してください。

select date
    , account
    , name
    , isnull([D], 0) as D
    , isnull([C], 0) as C
from 
(
    select *
    from journal j
    inner join account a
      on j.account = a.id
) x
pivot
(
    sum(amount)
    for type in ([D], [C])
) p
于 2012-05-31T15:47:51.087 に答える
1
SELECT DATE,
       account,
       CASE
         WHEN TYPE = 'D' THEN
          amount
         ELSE
          0
       END D,
       CASE
         WHEN TYPE = 'C' THEN
          amount
         ELSE
          0
       END C TYPE
  FROM JOURNAL
于 2012-05-31T15:58:28.750 に答える
0

あなたはこのようなことをしようとしていますか?

SELECT
    SUM(CASE [Type] WHEN 'C' THEN [Amount] ELSE 0 END) AS C
    ,SUM(CASE [Type] WHEN 'D' THEN [Amount] ELSE 0 END) AS D
    ,[Date]
    ,[Account]
FROM
    Journal
GROUP BY
    [Date]
    ,[Account]

これにより、日付とアカウントの組み合わせの各値の金額が合計されます。SUMアグリゲートを任意のアグリゲート(など)MINに置き換えることができますMAX

于 2012-05-31T15:47:26.777 に答える