1

SQL Server 2000-4つのテーブル、それぞれ3つの列。個人ID(COTA)、ユーザー(Telegestionador)、および作業量の値。

表は次のとおりです。Contactados, NC, FQ, OT

それらの1つの例。

XAV045  QUIPILDORY    26
XAV045  QUIPILDORY    29
XAV045  QUIPILDORY    21
XAV045  QUIPILDORY    39
XAV052  LOPEZRA       29
XAV052  LOPEZRA       39
XAV052  LOPEZRA       24
XAV052  LOPEZRA       36

私に必要なのはです。ID、USER、および個人ID/ユーザーごとにグループ化された作業量の合計を含むフィールドを含む結果ビュー。(4つのテーブルがあるので、最終ビューでは6つの列が必要です)

したがって、最初の行は

XAV045,QUIPILDORY, 115, X, Y, Z

X、Y、ZであるためSUM()、他の3つのテーブルの結果。

最初の試みはこれです:

SELECT     
   dbo.Contactados.COTA, dbo.Contactados.telegestionador, 
   SUM(dbo.Contactados.Total) AS Total, 
   SUM(dbo.OT.Total) AS [Cont-Der], 
   SUM(dbo.FQ.FQ) AS Cerrados, 
   SUM(dbo.NC.Total) AS NC
FROM
   dbo.Contactados 
LEFT OUTER JOIN
   dbo.OT ON dbo.Contactados.COTA = dbo.OT.COTA AND dbo.Contactados.telegestionador = dbo.OT.telegestionador AND dbo.Contactados.FGfin = dbo.OT.FGfin 
LEFT OUTER JOIN
   dbo.FQ ON dbo.Contactados.COTA = dbo.FQ.COTA AND dbo.Contactados.telegestionador = dbo.FQ.telegestionador AND dbo.Contactados.FGfin = dbo.FQ.FGfin 
LEFT OUTER JOIN
   dbo.NC ON dbo.Contactados.COTA = dbo.NC.COTA AND dbo.Contactados.telegestionador = dbo.NC.telegestionador AND dbo.Contactados.FGfin = dbo.NC.FGfin
GROUP BY 
   dbo.Contactados.telegestionador, dbo.Contactados.COTA

GROUP BY間違った結果がスローされます。テーブルの行を個別にグループ化するのではなく、結果をグループ化することを知っています。しかし、私はそうするための適切な方法を見つけることができません。

何か助けはありますか?

4

1 に答える 1

1

4つのテーブルすべてが4つの列に対して同一のデータ型を持っていると仮定すると、union allを使用してすべての値を一覧表示し、それらをサブクエリの一部として合計できます。

SELECT
COTA
,Telegestionador
,SUM(CASE WHEN table_name = 'Contactados' THEN work_value ELSE 0 END) AS Contactados_sum
,SUM(CASE WHEN table_name = 'NC' THEN work_value ELSE 0 END) AS nc_sum
,SUM(CASE WHEN table_name = 'FQ' THEN work_value ELSE 0 END) AS fq_sum
,SUM(CASE WHEN table_name = 'QT' THEN work_value ELSE 0 END) AS qt_sum
FROM
(
SELECT 
COTA
,Telegestionador
,work_value
,'Contactados' as table_name
FROM Contactados
UNION ALL
SELECT 
COTA
,Telegestionador
,work_value
,'NC' as table_name
FROM NC
UNION ALL
SELECT 
COTA
,Telegestionador
,work_value
,'FQ' as table_name
FROM FQ
UNION ALL
SELECT 
COTA
,Telegestionador
,work_value
,'QT' as table_name
FROM QT
) summary
GROUP BY
COTA
,Telegestionador
于 2012-07-06T11:21:25.847 に答える