2014-05-20 51 views
0

我正在尝试将这两个查询合并为一个查询。我曾尝试过各种连接和没有任何运气...加入来自不同表格的特定列,并入GROUP BY

这是两个SELECTS ...

SELECT  BlockSize, BootVolume, Compressed, SystemName , Label, Caption, PageFilePresent, 
      [dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', Capacity) AS Capacity, 
      [dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', FreeSpace) AS [Free Space], 
      [dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', Capacity - FreeSpace) AS [Used Space], 
      100 * FreeSpace/Capacity AS [Free Space %] 

FROM  CCS_Win32_Volume 

WHERE  ((@p_ServerName = SystemName) OR (@p_ServerName = 'all')) 

SELECT  [CLE_ENV_SHORT], [CLE_ENV_CAT_SHORT] 

FROM  [dbo].[CCS_V_SERVER_INSTANCE_DETAILS] 

WHERE  [CLE_ENV_SHORT] = @p_Env 
     AND [CLE_ENV_CAT_SHORT] = @p_EnvCat 

我谨[CLE_ENV_CAT_SHORT]显示在一个表,组中的所有列, [CLE_ENV_SHORT]。

这可能吗? 在此先感谢!

+0

见UNION ... [链接](http://msdn.microsoft.com/en-us/library/ms180026.aspx) – EarlOfEnnui

+0

待办事项CCS_Win32_Volume和CCS_V_SERVER_INSTANCE_DETAILS有一个共同的列?他们都有一个ServerName列吗? – Jerrad

+0

@Jerrad yes,CCS_Win32_Volume中的SystemName和[CCS_V_SERVER_INSTANCE_DETAILS] – choloboy

回答

1
SELECT  c1.BlockSize, c1.BootVolume, c1.Compressed, c1.SystemName, c1.Label, c1.Caption, c1.PageFilePresent, 
      [dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', c1.Capacity) AS Capacity, 
      [dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', c1.FreeSpace) AS [Free Space], 
      [dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', c1.Capacity - c1.FreeSpace) AS [Used Space], 
      100 * c1.FreeSpace/c1.Capacity AS [Free Space %], 
      [CLE_ENV_SHORT], [CLE_ENV_CAT_SHORT] 
FROM  CCS_Win32_Volume c1 
JOIN  [dbo].[CCS_V_SERVER_INSTANCE_DETAILS] c2 on c1.SystemName = c2.CSL_SERVER_NAME 
WHERE  ((@p_ServerName = c1.SystemName) OR (@p_ServerName = 'all')) and 
     c2.[CLE_ENV_SHORT] = @p_Env 
     c2.[CLE_ENV_CAT_SHORT] = @p_EnvCat 
ORDER BY c2.[CLE_ENV_CAT_SHORT] 
+0

中的[CSL_SERVER_NAME]请问您能解释一下c1。和c2。做?我收到很多错误。感谢您的输入! – choloboy

+0

c1和c2只是表CCS_Win32_Volume和CCS_V_SERVER_INSTANCE_DETAILS的别名。键入'c1.BlockSize'的时间要比键入'CCS_Win32_Volume.BlockSize'短。如果两个表具有相同的列名,则使用别名前缀列的前缀比整个表名更容易。在这种情况下,您可能不需要别名(因为它看起来不像这些表具有相同的列名),但我认为这是很好的做法。 – Jerrad

+0

感谢您的解释 – choloboy