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]