2015-06-19 54 views
0

试图将相同行的总和显示为输出。SQL Server:按行逐行输出

下面是SQL代码

SELECT 
    replace(replace(replace(replace(dbo.IDENTITY_MAP.Name,'My Company\',''),'-VLAN2',''),'.VLAN2\',''),'.Instr\','') as Site, 
    Count (CASE 
          WHEN dbo.SEM_AGENT.AGENT_VERSION LIKE '11.%' 
           AND dbo.SEM_COMPUTER.OPERATION_SYSTEM LIKE 'Windows%' THEN 1 
      END) AS 'Windows-SEP-11', 
    Count (CASE 
          WHEN dbo.SEM_AGENT.AGENT_VERSION LIKE '11.%' 
           AND dbo.SEM_COMPUTER.OPERATION_SYSTEM LIKE 'Mac%' THEN 1 
      END) AS 'Mac-SEP-11', 
    Count(CASE 
          WHEN dbo.SEM_AGENT.AGENT_VERSION LIKE '12.%' 
           AND dbo.SEM_COMPUTER.OPERATION_SYSTEM LIKE 'Windows%' THEN 1 
      END) AS 'Windows-SEP-12', 
    Count(CASE 
          WHEN dbo.SEM_AGENT.AGENT_VERSION LIKE '12.%' 
           AND dbo.SEM_COMPUTER.OPERATION_SYSTEM LIKE 'Mac%' THEN 1 
      END) AS 'Mac-SEP-12' 
FROM 
    dbo.sem_computer 
INNER JOIN 
    [dbo].[V_SEM_COMPUTER] ON [dbo].[V_SEM_COMPUTER].COMPUTER_ID = SEM_COMPUTER.COMPUTER_ID 
INNER JOIN 
    dbo.SEM_AGENT ON SEM_COMPUTER.COMPUTER_ID = dbo.SEM_AGENT.COMPUTER_ID 
INNER JOIN 
    dbo.SEM_CLIENT ON dbo.SEM_CLIENT.COMPUTER_ID = SEM_COMPUTER.COMPUTER_ID 
INNER JOIN 
    dbo.IDENTITY_MAP ON dbo.SEM_CLIENT.GROUP_ID = IDENTITY_MAP.ID 
INNER JOIN 
    dbo.PATTERN ON dbo.PATTERN.PATTERN_IDX = dbo.SEM_AGENT.PATTERN_IDX 
WHERE 
    Name LIKE '%31r%' 
GROUP BY 
    dbo.IDENTITY_MAP.Name 
ORDER BY 
    Site 

这是输出

enter image description here

不过,我想输出看起来像

enter image description here

而且我更新了SQL代码通过添加SUM()围绕计数和按名称分组,我得到错误

无法对包含聚合或子查询的表达式执行聚合函数。

代码:

SELECT 
    replace(replace(replace(replace(dbo.IDENTITY_MAP.Name,'My Company\',''),'-VLAN2',''),'.VLAN2\',''),'.Instr\','') as Site, 
    SUM(Count (CASE 
          WHEN dbo.SEM_AGENT.AGENT_VERSION LIKE '11.%' 
           AND dbo.SEM_COMPUTER.OPERATION_SYSTEM LIKE 'Windows%' THEN 1 
          END)) AS 'Windows-SEP-11', 
    SUM(Count (CASE 
          WHEN dbo.SEM_AGENT.AGENT_VERSION LIKE '11.%' 
           AND dbo.SEM_COMPUTER.OPERATION_SYSTEM LIKE 'Mac%' THEN 1 
          END)) AS 'Mac-SEP-11', 
    SUM(Count(CASE 
          WHEN dbo.SEM_AGENT.AGENT_VERSION LIKE '12.%' 
           AND dbo.SEM_COMPUTER.OPERATION_SYSTEM LIKE 'Windows%' THEN 1 
          END)) AS 'Windows-SEP-12', 
    SUM(Count(CASE 
          WHEN dbo.SEM_AGENT.AGENT_VERSION LIKE '12.%' 
           AND dbo.SEM_COMPUTER.OPERATION_SYSTEM LIKE 'Mac%' THEN 1 
          END)) AS 'Mac-SEP-12' 
FROM 
    dbo.sem_computer 
INNER JOIN 
    [dbo].[V_SEM_COMPUTER] ON [dbo].[V_SEM_COMPUTER].COMPUTER_ID = SEM_COMPUTER.COMPUTER_ID 
INNER JOIN 
    dbo.SEM_AGENT ON SEM_COMPUTER.COMPUTER_ID = dbo.SEM_AGENT.COMPUTER_ID 
INNER JOIN 
    dbo.SEM_CLIENT ON dbo.SEM_CLIENT.COMPUTER_ID = SEM_COMPUTER.COMPUTER_ID 
INNER JOIN 
    dbo.IDENTITY_MAP ON dbo.SEM_CLIENT.GROUP_ID = IDENTITY_MAP.ID 
INNER JOIN 
    dbo.PATTERN ON dbo.PATTERN.PATTERN_IDX = dbo.SEM_AGENT.PATTERN_IDX 
WHERE 
    Name LIKE '%31r%' 
GROUP BY 
    Name 

谢谢!

回答

2

您的群组需要完全匹配您想要将其分组。由于您正在修改“dbo.IDENTITY_MAP.Name”的文本,因此您需要将其用作分组。

SELECT replace(replace(replace(replace(dbo.IDENTITY_MAP.Name,'My Company\',''),'-VLAN2',''),'.VLAN2\',''),'.Instr\','') as Site, 
        Count (CASE 
          WHEN dbo.SEM_AGENT.AGENT_VERSION LIKE '11.%' 
           AND dbo.SEM_COMPUTER.OPERATION_SYSTEM LIKE 'Windows%' THEN 1 
          END) AS 'Windows-SEP-11', 
        Count (CASE 
          WHEN dbo.SEM_AGENT.AGENT_VERSION LIKE '11.%' 
           AND dbo.SEM_COMPUTER.OPERATION_SYSTEM LIKE 'Mac%' THEN 1 
          END) AS 'Mac-SEP-11', 
        Count(CASE 
          WHEN dbo.SEM_AGENT.AGENT_VERSION LIKE '12.%' 
           AND dbo.SEM_COMPUTER.OPERATION_SYSTEM LIKE 'Windows%' THEN 1 
          END) AS 'Windows-SEP-12', 
        Count(CASE 
          WHEN dbo.SEM_AGENT.AGENT_VERSION LIKE '12.%' 
           AND dbo.SEM_COMPUTER.OPERATION_SYSTEM LIKE 'Mac%' THEN 1 
          END) AS 'Mac-SEP-12' 
      FROM dbo.sem_computer 
        INNER JOIN [dbo].[V_SEM_COMPUTER] 
          ON [dbo].[V_SEM_COMPUTER].COMPUTER_ID = SEM_COMPUTER.COMPUTER_ID 
        INNER JOIN dbo.SEM_AGENT 
          ON SEM_COMPUTER.COMPUTER_ID = dbo.SEM_AGENT.COMPUTER_ID 
        INNER JOIN dbo.SEM_CLIENT 
          ON dbo.SEM_CLIENT.COMPUTER_ID = SEM_COMPUTER.COMPUTER_ID 
        INNER JOIN dbo.IDENTITY_MAP 
          ON dbo.SEM_CLIENT.GROUP_ID = IDENTITY_MAP.ID 
        INNER JOIN dbo.PATTERN 
          ON dbo.PATTERN.PATTERN_IDX = dbo.SEM_AGENT.PATTERN_IDX 
      WHERE Name LIKE '%31r%' 
      Group by replace(replace(replace(replace(dbo.IDENTITY_MAP.Name,'My Company\',''),'-VLAN2',''),'.VLAN2\',''),'.Instr\','') 
      Order by Site 
+0

感谢您的快速响应,它的工作原理 – Rhonda