Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 连接不同表中的特定列,合并分组依据_Sql_Sql Server_Tsql_Join_Group By - Fatal编程技术网

Sql 连接不同表中的特定列,合并分组依据

Sql 连接不同表中的特定列,合并分组依据,sql,sql-server,tsql,join,group-by,Sql,Sql Server,Tsql,Join,Group By,我试图创建一个将这两个查询合并为一个的查询。我尝试过各种连接,但没有任何运气 这是两个选择 SELECT BlockSize, BootVolume, Compressed, SystemName , Label, Caption, PageFilePresent, [dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', Capacity) AS Capacity, [dbo].[CCS_DIGITAL

我试图创建一个将这两个查询合并为一个的查询。我尝试过各种连接,但没有任何运气

这是两个选择

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]分组

这可能吗?
提前谢谢

见工会。。。CCS_Win32_卷和CCS_V_服务器_实例_详细信息是否有共同的列?它们都有服务器名列吗?@Jerrad是的,来自CCS_Win32_卷的系统名和来自[CCS_V_服务器_实例_详细信息]的[CSL_服务器_名称]您能解释一下c1是什么吗。和c2。做我犯了很多错误。谢谢你的意见!c1和c2只是表CCS_Win32_Volume和CCS_V_SERVER_INSTANCE_DETAILS的别名。键入
c1.BlockSize
比键入
CCS\u Win32\u Volume.BlockSize
短。如果两个表具有相同的列名,则使用别名作为列名前缀比使用整个表名更容易。在这种情况下,您可能不需要别名(因为表的列名看起来不一样),但我认为这样做是一种很好的做法。您的查询只需在WHERE子句中将c1.ServerName更改为c1.SystemName即可。谢谢你的帮助@Jerrad当我按c2添加一个组时。[CLE_ENV_CAT_SHORT]我在选择列表中得到“列'CCS_Win32_Volume.BlockSize'无效,因为它不包含在聚合函数或GROUP BY子句中。”错误。你知道是什么引起的吗?您是否可以使用任何不会对结果产生影响的聚合函数(比如消除错误的方法)@Jerrad通过对结果进行分组,您试图实现什么目标?你能发布一个你当前结果的样本,以及你希望它们看起来像什么吗?当你按一列进行分组时,这是因为你在某种程度上总结了其他列(将它们相加,求平均值,诸如此类)。
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]