1

枢轴,伙计……我只是想念它。也许是因为我没有做聚合。哎呀,也许枢轴不是做到这一点的方法。感觉它应该很简单,但它让我难住了。

假设我有这个:

SELECT col1
FROM tbl1

col1
====
414
589

我怎样才能得到这两条记录:

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

出于这个问题的目的,有几个注意事项

  • 永远不会拿回超过两条记录
  • 我总是要取回整数,但我不知道它们会是什么
4

3 回答 3

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;
于 2012-12-06T19:10:30.343 回答
1

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

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

如果有两个值,这只会显示第二个值。

于 2012-12-06T19:11:38.923 回答
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

于 2012-12-06T19:13:50.367 回答