2013-09-30 140 views
0

Query shows results like:組合結果

我需要將結果顯示在一行而不是少數。

查詢:

SELECT C.ClientCaseNumber, 
      C.SetId, 
      Sum(CASE 
       WHEN CA.CaseActionDefinitionId IN (28, 29, 30) THEN 1 
       ELSE 0 
       END) AS [Wezwania], 
      Sum(CASE 
       WHEN CA.CaseActionDefinitionId IN (14, 21) THEN 1 
       ELSE 0 
       END) AS [Kontakt], 
      Sum(CASE 
       WHEN CA.CaseActionDefinitionId = 32 THEN 1 
       ELSE 0 
       END) AS [SMS], 
      Sum(CASE 
       WHEN CA.CaseActionDefinitionId = 44 THEN 1 
       ELSE 0 
       END) AS [Zgon], 
      Sum(CASE 
       WHEN CA.CaseActionDefinitionId = 49 THEN 1 
       ELSE 0 
       END) AS [Areszt], 
      Sum(CASE 
       WHEN CA.CaseActionDefinitionId = 37 THEN 1 
       ELSE 0 
       END) AS [Odmowa], 
      Sum(CASE 
       WHEN CA.CaseActionDefinitionId = 39 THEN 1 
       ELSE 0 
       END) AS [Podważa], 
      Sum(CASE 
       WHEN CA.CaseActionDefinitionId = 99 THEN 1 
       ELSE 0 
       END) AS [Ugoda], 
      [Adres], 
      [Info1], 
      [Numer], 
      [Info2], 
      [Mail], 
      [Info3], 
      [Powód] 
    FROM (SELECT cast(Notes as char) AS [Adres], CaseActionDefinitionId AS [Info1], NULL AS [Numer], NULL as [Info2], NULL AS [Mail], NULL as [Info3], NULL AS [Powód], CaseDetailId 
      FROM CaseActionHistory 
      WHERE CaseActionDefinitionId = 68 
     UNION ALL 
     SELECT NULL, NULL, cast(Info as char), CaseActionDefinitionId, NULL, NULL, NULL, CaseDetailId 
      FROM CaseActionHistory 
      WHERE CaseActionDefinitionId IN (54, 55, 56, 58, 
              59, 60, 61, 62, 63) 
     UNION ALL 
      SELECT NULL, NULL, NULL, NULL, cast(Notes as char), CaseActionDefinitionId, NULL, CaseDetailId 
      FROM CaseActionHistory 
      WHERE CaseActionDefinitionId = 66 
     UNION ALL 
      SELECT NULL, NULL, NULL, NULL, NULL, NULL, cast(Description as char(100)), CaseDetailId 
      FROM CaseActionDefinition JOIN CaseActionHistory AS C ON DefinitionId = C.CaseActionDefinitionId 
      WHERE DefinitionId BETWEEN 70 AND 78) AS x 
      INNER JOIN CaseDetails AS C 
        ON x.CaseDetailId = C.CaseDetailsId 
      INNER JOIN CaseActionHistory AS CA 
        ON C.CaseDetailsId = CA.CaseDetailId 
    WHERE C.ClientId = 11 
    GROUP BY C.ClientCaseNumber, [Adres], [Numer], [Mail], [Info1], [Powód], [Info2], [Info3], C.SetId 

我想我需要在GROUP某種程度上擺脫幾件事情BY,但是我真的沒有一個想法如何更改查詢本身做正確事情的工作。

+0

,你能否告訴我們報表的設計視圖?這個查詢對於我來說看起來太大了,但是您應該能夠在報告中對f.ex ClientCaseNumber進行分組。 –

+0

報表設計器視圖不過是一個帶有插入列的表格。我不想按ClientCaseNumber進行分組。我需要將這3行合併爲1. – glaeran

回答

0

我認爲你應該聲明表並插入它:SetId和所有SUM(...),並通過SetId組。然後用其他數據更新表格。

樣品:

declare @table table (
ClientCaseNumber int 
,SetId int 
,Wezwania int 
,Kontakt int 
,SMS int 
,Zgon int 
,Areszt int 
,Odmowa int 
,Podważa int 
,Ugoda int 
,Adres nvarchar(255) 
,Info1 nvarchar(255) 
,Numer nvarchar(255) 
,Info2 nvarchar(255) 
,Mail nvarchar(255) 
,Info3 nvarchar(255) 
,Powód nvarchar(255)) 

insert into @table (
ClientCaseNumber 
,Wezwania 
,Kontakt 
,SMS 
,Zgon 
,Areszt 
,Odmowa 
,Podważa 
,Ugoda) 
SELECT 
C.ClientCaseNumber, 
Sum(CASE 
     WHEN CA.CaseActionDefinitionId IN (28, 29, 30) THEN 1 
     ELSE 0 
    END) AS [Wezwania], 
Sum(CASE 
     WHEN CA.CaseActionDefinitionId IN (14, 21) THEN 1 
     ELSE 0 
    END) AS [Kontakt], 
Sum(CASE 
     WHEN CA.CaseActionDefinitionId = 32 THEN 1 
     ELSE 0 
    END) AS [SMS], 
Sum(CASE 
     WHEN CA.CaseActionDefinitionId = 44 THEN 1 
     ELSE 0 
    END) AS [Zgon], 
Sum(CASE 
     WHEN CA.CaseActionDefinitionId = 49 THEN 1 
     ELSE 0 
    END) AS [Areszt], 
Sum(CASE 
     WHEN CA.CaseActionDefinitionId = 37 THEN 1 
     ELSE 0 
    END) AS [Odmowa], 
Sum(CASE 
     WHEN CA.CaseActionDefinitionId = 39 THEN 1 
     ELSE 0 
    END) AS [Podważa], 
Sum(CASE 
     WHEN CA.CaseActionDefinitionId = 99 THEN 1 
     ELSE 0 
    END) AS [Ugoda] 
FROM (SELECT cast(Notes as char) AS [Adres], CaseActionDefinitionId AS [Info1], NULL AS [Numer], NULL as  [Info2], NULL AS [Mail], NULL as [Info3], NULL AS [Powód], CaseDetailId 
     FROM CaseActionHistory 
     WHERE CaseActionDefinitionId = 68 
    UNION ALL 
    SELECT NULL, NULL, cast(Info as char), CaseActionDefinitionId, NULL, NULL, NULL, CaseDetailId 
     FROM CaseActionHistory 
     WHERE CaseActionDefinitionId IN (54, 55, 56, 58, 
             59, 60, 61, 62, 63) 
    UNION ALL 
     SELECT NULL, NULL, NULL, NULL, cast(Notes as char), CaseActionDefinitionId, NULL, CaseDetailId 
     FROM CaseActionHistory 
     WHERE CaseActionDefinitionId = 66 
    UNION ALL 
     SELECT NULL, NULL, NULL, NULL, NULL, NULL, cast(Description as char(100)), CaseDetailId 
     FROM CaseActionDefinition JOIN CaseActionHistory AS C ON DefinitionId = C.CaseActionDefinitionId 
     WHERE DefinitionId BETWEEN 70 AND 78) AS x 
     INNER JOIN CaseDetails AS C 
       ON x.CaseDetailId = C.CaseDetailsId 
     INNER JOIN CaseActionHistory AS CA 
       ON C.CaseDetailsId = CA.CaseDetailId 
WHERE C.ClientId = 11 
GROUP BY C.ClientCaseNumber 

update @table 
set SetId = X.SetId 
, Adres = X.Adres 
,Info1 = X.Info1 
,Numer = X.Numer 
,Info2 = X.Info2 
,Mail = X.Mail 
,Info3 = X.Info3 
,Powód = X.Powód 
from 
@table as T 
join (
SELECT 
    C.ClientId, 
    C.SetId, 
    [Adres], 
    [Info1], 
    [Numer], 
    [Info2], 
    [Mail], 
    [Info3], 
    [Powód] 
FROM (SELECT cast(Notes as char) AS [Adres], CaseActionDefinitionId AS [Info1], NULL AS [Numer], NULL as [Info2], NULL AS [Mail], NULL as [Info3], NULL AS [Powód], CaseDetailId 
     FROM CaseActionHistory 
     WHERE CaseActionDefinitionId = 68 
    UNION ALL 
    SELECT NULL, NULL, cast(Info as char), CaseActionDefinitionId, NULL, NULL, NULL, CaseDetailId 
     FROM CaseActionHistory 
     WHERE CaseActionDefinitionId IN (54, 55, 56, 58, 
             59, 60, 61, 62, 63) 
    UNION ALL 
     SELECT NULL, NULL, NULL, NULL, cast(Notes as char), CaseActionDefinitionId, NULL, CaseDetailId 
     FROM CaseActionHistory 
     WHERE CaseActionDefinitionId = 66 
    UNION ALL 
     SELECT NULL, NULL, NULL, NULL, NULL, NULL, cast(Description as char(100)), CaseDetailId 
     FROM CaseActionDefinition JOIN CaseActionHistory AS C ON DefinitionId = C.CaseActionDefinitionId 
     WHERE DefinitionId BETWEEN 70 AND 78) AS x 
     INNER JOIN CaseDetails AS C 
       ON x.CaseDetailId = C.CaseDetailsId 
     INNER JOIN CaseActionHistory AS CA 
       ON C.CaseDetailsId = CA.CaseDetailId 
    WHERE 
     X.ClientId = 11 
) as X on X.ClientCaseNumber = T.ClientCaseNumber 

SELECT DISTINCT ClientCaseNumber, 
      SetId, 
      [Wezwania], 
      [Kontakt], 
      [SMS], 
      [Zgon], 
      [Areszt], 
      [Odmowa], 
      [Podważa], 
      [Ugoda], 
      [Adres], 
      [Info1], 
      [Numer], 
      [Info2], 
      [Mail], 
      [Info3], 
      [Powód] 
    FROM @table 
+0

然後再用我需要的數據進行另一個SELECT?導致上面報告生成器不會給我任何類型的字段來使用 – glaeran

+0

然後從該表中選擇所有結果。 樣品: 選擇 \t ClientCaseNumber \t,SETID \t,Wezwania \t,KONTAKT \t,短信 \t,Zgon \t,Areszt \t,Odmowa \t,Podważa \t,Ugoda \t,住址 \t,Info1 \t,NUMER \t,信息2 \t,郵件 \t,INFO3 \t,Powód 從 \t @table – Justas

+0

因爲我需要通過ClientCaseNumber分組不SETID我代替他們在表中。 http://pastebin.com/PdYGT1Z9 - 查詢的當前外觀。對所有結果顯示相同的[數字] [郵件],[地址],[電源]。 – glaeran