0

ユニオンオールクエリがあります。しかし、結果セットには 2 つの P1 レコードと 3 つの P2 レコードがあります。値がなくても 3 つの P3 レコードを表示したいと思います。

以下の私のコードを見てください

SELECT 'P1'     AS Priority,
       Count(*) Total,
       CONVERT(VARCHAR(5), Datepart(yyyy, logdate))
       + RIGHT('00'+ CONVERT(VARCHAR(5), Datepart(mm, logdate)), 2)
FROM   dbo.mg_rpt_calls
WHERE  priority = 'P1'
       AND CONVERT(VARCHAR(5), Datepart(yyyy, logdate))
           + RIGHT('00'+ CONVERT(VARCHAR(5), Datepart(mm, logdate)), 2) BETWEEN
               CONVERT(VARCHAR(5), Datepart(yyyy, Getdate()))
               + RIGHT(
               '00'+ CONVERT(VARCHAR(5), Datepart(mm, Getdate())-2), 2)AND
               CONVERT(
               VARCHAR(5), Datepart(yyyy, Getdate()))
               +
               RIGHT
               ('00'+ CONVERT(VARCHAR(5), Datepart(mm, Getdate())), 2)
GROUP  BY CONVERT(VARCHAR(5), Datepart(yyyy, logdate))
          + RIGHT('00'+ CONVERT(VARCHAR(5), Datepart(mm, logdate)), 2)
UNION ALL
SELECT 'P2'     AS Priority,
       Count(*) Total,
       CONVERT(VARCHAR(5), Datepart(yyyy, logdate))
       + RIGHT('00'+ CONVERT(VARCHAR(5), Datepart(mm, logdate)), 2)
FROM   dbo.mg_rpt_calls
WHERE  priority = 'P2'
       AND CONVERT(VARCHAR(5), Datepart(yyyy, logdate))
           + RIGHT('00'+ CONVERT(VARCHAR(5), Datepart(mm, logdate)), 2) BETWEEN
               CONVERT(VARCHAR(5), Datepart(yyyy, Getdate()))
               + RIGHT(
               '00'+ CONVERT(VARCHAR(5), Datepart(mm, Getdate())-2), 2)AND
               CONVERT(
               VARCHAR(5), Datepart(yyyy, Getdate()))
               +
               RIGHT
               ('00'+ CONVERT(VARCHAR(5), Datepart(mm, Getdate())), 2)
GROUP  BY CONVERT(VARCHAR(5), Datepart(yyyy, logdate))
          + RIGHT('00'+ CONVERT(VARCHAR(5), Datepart(mm, logdate)), 2)
ORDER  BY CONVERT(VARCHAR(5), Datepart(yyyy, logdate))
          + RIGHT('00'+ CONVERT(VARCHAR(5), Datepart(mm, logdate)), 2) 

私の結果セットは以下です

Priority Total (No column name)
P2       9     201209
P2       15    201210
P1       1     201210
P1       1     201211
P2       5     201211

ありがとう、マイケル

4

1 に答える 1

0

次のような下位レベルで group by を使用したいと思います。

SELECT Priority, Count(*) Total,
       CONVERT(VARCHAR(5), Datepart(yyyy, logdate)) + RIGHT('00'+ CONVERT(VARCHAR(5), Datepart(mm, logdate)), 2)
FROM   dbo.mg_rpt_calls
WHERE  CONVERT(VARCHAR(5), Datepart(yyyy, logdate))
           + RIGHT('00'+ CONVERT(VARCHAR(5), Datepart(mm, logdate)), 2) BETWEEN
               CONVERT(VARCHAR(5), Datepart(yyyy, Getdate()))
               + RIGHT(
               '00'+ CONVERT(VARCHAR(5), Datepart(mm, Getdate())-2), 2)AND
               CONVERT(VARCHAR(5), Datepart(yyyy, Getdate())) +
               RIGHT('00'+ CONVERT(VARCHAR(5), Datepart(mm, Getdate())), 2)
group by Priority, CONVERT(VARCHAR(5), Datepart(yyyy, logdate)) + RIGHT('00'+ CONVERT(VARCHAR(5), Datepart(mm, logdate)), 2)

オプションで、別のwhere節またはhaving節を の効果に含めることができますpriority in ('P1', 'P2', 'P3')

于 2012-11-19T22:40:37.603 に答える