1

我回答了一个问题,我必须即时生成临时derived table表(或使用实际表),请参阅:https ://stackoverflow.com/a/24890815/1688441 。

而不是使用以下派生表(使用 select 和 union):

  (SELECT 21 AS id UNION SELECT 22) AS tmp

内:

SELECT GROUP_CONCAT(CASE WHEN COLUMN1 IS NULL THEN "NULL" ELSE COLUMN1 END)
FROM archive
RIGHT OUTER JOIN
  (SELECT 21 AS id UNION SELECT 22) AS tmp ON tmp.id=archive.column2;

我更希望能够使用更优雅的东西,例如:

  ([[21],[22]]) AS tmp

在任何 SQL 数据库或任何类似功能中是否有任何此类符号?有没有一种简单的方法来使用 aset代替 a tablein from(当我说set我的意思是一维值列表),就像我们使用IN.

因此,使用这种表示法,一个具有 1 个 int 列和 1 个具有 2 行的字符串列的临时表将具有:

([[21,'text here'],[22,'text here2']]) AS tmp
4

1 回答 1

1

SQL Server 允许这种语法:

SELECT A, B, C,
 CASE WHEN D < 21 THEN ' 0-20'
      WHEN D < 51 THEN '21-50'
      WHEN D < 101 THEN '51-100'
      ELSE '>101' END AS E
 ,COUNT(*) as "Count"
 FROM  (
    values ('CAR', 1,2,22)
          ,('CAR', 1,2,23)
          ,('BIKE',1,3,2)
)TABLE_X(A,B,C,D)

GROUP BY A, B, C, 
 CASE WHEN D < 21 THEN ' 0-20'
      WHEN D < 51 THEN '21-50'
      WHEN D < 101 THEN '51-100'
      ELSE '>101' END

产生这个:

A    B           C           E      Count
---- ----------- ----------- ------ -----------
BIKE 1           3            0-20  1
CAR  1           2           21-50  2
于 2014-07-23T00:31:28.777 回答