使用单列并且没有聚合函数进行透视

时间:2013-04-11 16:17:37

标签: sql sql-server-2008

我怀疑。我有一个名为“ID”的专栏。在该列中,我有“FieldName”后跟“FromDate”,“Value”后跟“2012/12/01”,“FieldName”后跟“ToDate”值“2013/12/01”等值,

**ID column**    
        FieldName
        FromDt
        Value
        2010/12/01
        FieldName
        ToDt
        Value
        2013/12/21
        FieldName
        CreatedDt
        Value
        2012/10/01
        FieldName
        ModifyDt
        Value
        2013/01/02

现在我想要一张像

这样的表格
**FieldName  Value**
FromDt      2010/12/01
ToDt        2013/12/21
CreatedDt   2012/10/01
ModifyDt    2013/01/02

是否可以使用具有单列且没有聚合功能的数据透视图?请建议我怎么做? (使用Pivot或其他方法)

此致 T.N.Nagasundar

2 个答案:

答案 0 :(得分:1)

@Magnus建议你应该有另一列Order By

否则,试试这个。 SQLFiddle

WITH cte AS
(
  SELECT ID,ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS row_num
  FROM tbl
 )
SELECT c1.ID AS [field_name], c2.ID AS [value]
FROM cte c1
INNER JOIN cte c2
  ON c2.row_num = c1.row_num + 2
WHERE (c1.row_num % 4) = 2

答案 1 :(得分:0)

我不知道在这种情况下使用pivot。可以将原始订单行拆分为4个组,并从每个组中选择每个第2行和第4行,如下所示:

http://sqlfiddle.com/#!3/b2af8/13/0

with t2 as (
  select
    id,
    (row_number() over(order by (select 0)) - 1) / 4 grp,
    (row_number() over(order by (select 0)) - 1) % 4 row
  from t
)
select a.id FieldName,
  b.id Value
from t2 a
join t2 b
  on a.grp = b.grp
  and a.row = 1 -- 2nd row numbering from 0
  and b.row = 3

(灵感来自https://stackoverflow.com/a/6390282/1176601