1

SQL Server 2008 R2 を使用しています。作成日ごとにグループ化された多数の行をフェッチする 6 つのテーブルがあります。

例えば ​​:

SELECT COUNT(*) AS NoOfReading FROM TableA
WHERE IsDeleted = 0 
GROUP BY CONVERT(VARCHAR(10), CreatedDtUTC,111)

SELECT COUNT(*) AS NoOfReading FROM TableB
WHERE IsDeleted = 0 
GROUP BY CONVERT(VARCHAR(10), CreatedDtUTC,111)

SELECT COUNT(*) AS NoOfReading FROM TableC
WHERE IsDeleted = 0 
GROUP BY CONVERT(VARCHAR(10), CreatedDtUTC,111)

そしてこれから..

sum of NoOfReadingここで、すべてのテーブル グループを作成日別に作成したいと考えています。解決策はありますか??

PS : すべてのクエリ間で「+」を使用しようとしましたが、エラーが発生しました。

ありがとう

4

3 に答える 3

0

自分で解決しました:

;WITH MeasurementReadings(NoOfReading, CreatedDtUTC) AS 
(
    SELECT COUNT(*) AS  NoOfReading, CreatedDtUTC FROM TableA
    WHERE IsDeleted = 0 
    GROUP BY CONVERT(VARCHAR(10), CreatedDtUTC,111)
    UNION ALL
    SELECT COUNT(*) AS  NoOfReading, CreatedDtUTC  FROM TableB
    WHERE IsDeleted = 0 
    GROUP BY CONVERT(VARCHAR(10), CreatedDtUTC,111)
    UNION ALL
    SELECT COUNT(*) AS  NoOfReading, CreatedDtUTC FROM TableC
    WHERE IsDeleted = 0 
    GROUP BY CONVERT(VARCHAR(10), CreatedDtUTC,111)
)  
SELECT SUM(NoOfReading) AS NoOfRecords, CreatedDtUTC 
FROM MeasurementReadings
GROUP BY CreatedDtUTC

ありがとう

于 2013-04-09T06:42:44.810 に答える
0

UNION ALL重複を保持する whichを使用できます:

SELECT COUNT(*) AS NoOfReading FROM
(
   SELECT CreatedDtUTC,IsDeleted FROM TableA
   UNION ALL
   SELECT CreatedDtUTC,IsDeleted FROM TableB
   UNION ALL
   SELECT CreatedDtUTC,IsDeleted FROM TableC
) t
WHERE IsDeleted = 0 
GROUP BY DATEADD(day,DATEDIFF(day,0,CreatedDtUTC),0)
于 2013-04-09T06:39:36.460 に答える
0

簡単な追加でうまくいくと思います..

select (
    (SELECT COUNT(*) FROM TableA
    WHERE IsDeleted = 0 
    GROUP BY CONVERT(VARCHAR(10), CreatedDtUTC,111))
    +
    (SELECT COUNT(*) FROM TableB
    WHERE IsDeleted = 0 
    GROUP BY CONVERT(VARCHAR(10), CreatedDtUTC,111))
    +
    (SELECT COUNT(*) FROM TableC
    WHERE IsDeleted = 0 
    GROUP BY CONVERT(VARCHAR(10), CreatedDtUTC,111))
    )  AS NoOfReadingSum
于 2013-04-09T06:34:15.660 に答える