加入数据透视表SQL

3
我有两个表需要联接。其中一个表的标题实际上在字段中。经过多次尝试,我找到了下面的解决方法。一开始我很兴奋,因为它可以运行,但是令我失望的是,我发现它只有来自表[GM].[dbo].[PKT]的标题。表a([GM].[dbo].[CMPLX])中的所有字段都丢失了。如何显示来自表a的字段?另外,我尝试只从表p中显示特定的字段,但只有在透视部分使用Select * From才能起作用。
With GM1 AS (
Select TOP 10 a.[CMPLX_NBR],
  a.[SYSTEM_ID],
  a.[PKT_TYP_CD],
  a.[CATEG_CD],
  a.[SUPPLR_CD],
  a.[TRANS_CD],
  a.[PRIORITY_INT],
  a.[PRIORITY_INT_EXPR_DT],
  a.[RQSTR_NBR],
  a.[TMSTMP],
p.[PKT_DTTM]
FROM [GM].[dbo].[CMPLX] as a
INNER JOIN [GM].[dbo].[PKT] as p
ON a.[CMPLX_NBR] = p.[CMPLX_NBR]
)

SELECT *
FROM [GM].[dbo].[PKT]
PIVOT (
    sum([PKT_ATTR_CNT])
        For [PKT_ATTR_CD]
        IN (not_sent, not_sent, other, appl, avg, max, min, sum, sent, why)
        )AS GM1Pivot;

2
可能是因为您从表中选择而不是从CTE中选择?即SELECT * FROM [GM].[dbo].[PKT] PIVOT...而不是SELECT * FROM GM1 PIVOT... - ZLK
非常感谢!我简直不敢相信我错过了那个。 - Martha P
1个回答

0
在PIVOT操作符中,我们只指定聚合和展开元素,而不是分组元素。T-SQL通过排除法来确定分组元素。这就是为什么我们在使用PIVOT之前要使用一个CTE(仅3个元素(列))的原因。
CTE应该只包含以下元素:
  1. 分组列([CMPLX_NBR])

  2. 展开列([PKT_TYP_CD])

  3. 聚合列([PKT_ATTR_CNT])


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接