2

SQLサーバーのPIVOTテーブルで私を助けてください。以下のような出力が得られました。ここで、保留中の割り当てと保留中のコーディングの合計数を、各日付行の下の別々の列に表示したいと考えています。

select ScanDate, filestatus, COUNT(filestatus) as filecount from ScanLog 
where FileSource = 'ebridge'
group by filestatus, ScanDate

scandate        filestatus      filecount
2013-08-01  Allocation Pending  8
2013-08-01  Coding Pending      1
2013-08-02  Allocation Pending  4
2013-08-02  Coding Pending      1
2013-08-03  Allocation Pending  4
2013-08-04  Allocation Pending  18
2013-08-04  Coding Pending      3
2013-08-05  Allocation Pending  6

次のコードを使用しましたが、「scandate」が有効なフィールドではないため、エラーが発生しました。私を案内してください。

select [scandate] from ScanLog 
pivot (count(scandate) 
for filestatus in ([allocation pending],[coding pending])) as A
where FileSource = 'ebridge'
4

2 に答える 2

3

これを試してみてください -

DECLARE @temp TABLE (
      ScanDate DATETIME
    , FileSource VARCHAR(10)    
    , FileStatus VARCHAR(30)
    , FileCount INT

)

INSERT INTO @temp
VALUES 
    ('2013-08-01', 'ebridge', 'Allocation Pending', 8),
    ('2013-08-01', 'ebridge', 'Coding Pending', 1),
    ('2013-08-02', 'ebridge', 'Allocation Pending', 4),
    ('2013-08-02', 'ebridge', 'Coding Pending', 1),
    ('2013-08-03', 'ebridge', 'Allocation Pending', 4),
    ('2013-08-04', 'ebridge', 'Allocation Pending', 18),
    ('2013-08-04', 'ebridge', 'Coding Pending', 3),
    ('2013-08-05', 'ebridge', 'Allocation Pending', 6)

SELECT *
FROM (
    SELECT scandate, filestatus
    FROM @temp
    WHERE FileSource = 'ebridge'
) t
PIVOT (
    COUNT(scandate)
    FOR filestatus IN ([Allocation Pending], [Coding Pending])
) a
于 2013-08-14T14:05:16.493 に答える
2

このクエリを試して you may use left outer , right outer join or inner joinください。データがテーブルにどのようにあるかによって異なります

SELECT  frst.scandate
    ,   frst.filestatus
    ,   frst.filecount
    ,   secnd.filestatus
    ,   secnd.filecount1
FROM
(
    SELECT  scandate
        ,   filestatus
        ,   COUNT(filestatus) AS filecount
    FROM ScanLog 
    WHERE FileSource = 'ebridge'
        AND filestatus = 'Allocation Pending'
    GROUP BY
        filestatus
    ,   scandate
) frst
LEFT OUTER JOIN
(
    SELECT  scandate
        ,   filestatus
        ,   COUNT(filestatus) AS filecount1
    FROM ScanLog 
    WHERE FileSource = 'ebridge'
        AND filestatus = 'Coding Pending'
    GROUP BY
        filestatus
    ,   scandate
) secnd ON frst.scandate = secnd.scandate
于 2013-08-14T14:02:39.600 に答える