简单(?)PIVOT没有聚合

时间:2012-12-06 19:03:41

标签: sql sql-server tsql pivot

Pivots,伙计......我只是想念它。也许是因为我没有做聚合。哎呀,也许一个支点不是这样做的方式。感觉它应该很简单,但它让我感到难过。

让我说我得到了这个:

SELECT col1
FROM tbl1

col1
====
414
589

如何将这两条记录恢复为:

fauxfield1  fauxfield2
==========  ==========
414         589

出于这个问题的目的,有几点需要注意

  • 从不要取回两个以上的记录
  • 我总是会回到整数,但是我不知道它们会是什么

3 个答案:

答案 0 :(得分:2)

如果你只有有2个值,你就可以这样做

select
    (select top(1) col1 from tbl1 order by col1) fauxfield1,
    (select top(1) col1 from tbl1 order by col1 desc) fauxfield2;

但我不明白为什么需要避免聚合?你找到了一些残缺的SQL Server版本吗?普通查询将是

select min(col1) fauxfield1, max(col1) fauxfield2
  from tbl1;

答案 1 :(得分:1)

如果你知道你只有两个,为什么不这样做:

SELECT 
    MIN(col1) ff1
    , CASE MAX(col1) 
        WHEN MIN(col1) THEN NULL
        ELSE MAX(col1)
      END ff2
FROM 
    tbl1;

如果有两个值,则仅显示第二个值。

答案 2 :(得分:1)

您可以实施PIVOT运算符:

select [1] as field1,
  [2] as field2
from
(
  select col1, row_number() Over(order by col1) rn
  from yourtable
) src
pivot
(
  max(col1)
  for rn in ([1], [2])
) piv

请参阅SQL Fiddle with Demo