Tsql 具有相关列的透视表

Tsql 具有相关列的透视表,tsql,pivot,Tsql,Pivot,在我看来,这似乎是一项微不足道的任务,但由于(可能)缺乏对旋转机制的理解,我很难找到解决方案 我有下表和样本数据: id code created_datetime sourceID ------ ---- ------------------- -------- 481792 DEF 2016-12-04 18:31:00 398464 481792 JKH 2016-12-04 18:31:00 398464 486429 ABC

在我看来,这似乎是一项微不足道的任务,但由于(可能)缺乏对旋转机制的理解,我很难找到解决方案

我有下表和样本数据:

id      code    created_datetime    sourceID
------  ----    ------------------- --------
481792  DEF     2016-12-04 18:31:00 398464
481792  JKH     2016-12-04 18:31:00 398464
486429  ABC     2010-09-07 09:29:00 302304
486429  DEF     2009-02-05 03:04:00 320903
486429  GHI     2009-02-05 03:04:00 320903
我希望得到的结果是“code”列上的一个轴心,它指示Id是否存在此代码。我试图使用SELECT DATEDIFF(DAY、created_datetime、CURRENT_TIMESTAMP)将“created_datetime”列转换为到目前为止的天数,最后是sourceID。我对结果有这样的想法(我真的希望格式正确):

一行公关id,就是

到目前为止,我所做的尝试都是从以下链接中得到启发的:使用这里的示例,我得出了以下结论:

select id,
  [ABC], [ABC_source], [ABC_days_active],
  [DEF], [DEF_source], [DEF_days_active],
  [GHI], [GHI_source], [GHI_days_active],
  [JKH], [JKH]_source], [JKH_days_active]
from
(
  SELECT  id, 
                code,
                source,
                col, value
        FROM MyTable
  cross apply
  (
    values
      ([code], CASE code WHEN NULL THEN 0 ELSE 1 END),
      ([code]+'_source', [source]),
      ([code]+'_date', CAST(DATEDIFF(DAY,created_datetime,CURRENT_TIMESTAMP) AS varchar (20)))
  ) c (col, value)
) d
pivot
(
  max(value)
  for col in ([ABC], [ABC_source], [ABC_date], [DEF], [DEF_source], [DEF_date],
              [GHI], [GHI_source], [GHI_date], [JKH], [JKH_source], [JKH_date])
) piv;
这给了我正确的列(列名),但我的行数仍然与开始时相同。(此外,0只显示为NULL,但我可以接受。)


你能给我一个提示让我去那里吗?这可能是我没有正确解释的东西…

尝试选择
piv.
。您选择了
\u active
列,但这些列不是轴的一部分。
from
-子句中未在
PIVOT
中使用的所有列将用于分组。另外,在我看来,您正在尝试从源表透视两列
PIVOT
仅支持一个聚合函数以透视一列。

尝试选择
piv.*
。您选择了
\u active
列,但这些列不是轴的一部分。
from
-子句中未在
PIVOT
中使用的所有列将用于分组。另外,在我看来,您正在尝试从源表透视两列
PIVOT
仅支持一个聚合函数以透视一列。

尝试选择
piv.
。您选择了
\u active
列,但这些列不是轴的一部分。
from
-子句中未在
PIVOT
中使用的所有列将用于分组。另外,在我看来,您正在尝试从源表透视两列
PIVOT
只支持一个聚合函数对一列进行透视。啊哈!成功了-谢谢阿奎罗!!我怎样才能在答案上标记你的评论并给你评分呢?你不能,我已经把我的评论作为答案发布了。很高兴我能帮忙!尝试选择
piv.*
。您选择了
\u active
列,但这些列不是轴的一部分。
from
-子句中未在
PIVOT
中使用的所有列将用于分组。另外,在我看来,您正在尝试从源表透视两列
PIVOT
只支持一个聚合函数对一列进行透视。啊哈!成功了-谢谢阿奎罗!!我怎样才能在答案上标记你的评论并给你评分呢?你不能,我已经把我的评论作为答案发布了。很高兴我能帮忙!
select id,
  [ABC], [ABC_source], [ABC_days_active],
  [DEF], [DEF_source], [DEF_days_active],
  [GHI], [GHI_source], [GHI_days_active],
  [JKH], [JKH]_source], [JKH_days_active]
from
(
  SELECT  id, 
                code,
                source,
                col, value
        FROM MyTable
  cross apply
  (
    values
      ([code], CASE code WHEN NULL THEN 0 ELSE 1 END),
      ([code]+'_source', [source]),
      ([code]+'_date', CAST(DATEDIFF(DAY,created_datetime,CURRENT_TIMESTAMP) AS varchar (20)))
  ) c (col, value)
) d
pivot
(
  max(value)
  for col in ([ABC], [ABC_source], [ABC_date], [DEF], [DEF_source], [DEF_date],
              [GHI], [GHI_source], [GHI_date], [JKH], [JKH_source], [JKH_date])
) piv;