【问题标题】:how to get combination of rows through query如何通过查询获得行组合
【发布时间】:2012-04-02 11:15:05
【问题描述】:

我有一个包含以下字段和数据的表格。

id  type value
1   1    1
2   2    1
3   2    2
4   2    3

运行查询后,我应该在临时表中得到如下结果

1,1
1,2
1,3

如果我在类型 1 中有多个值,那么它应该做同样的事情

所以如果数据是

 id  type value
 1   1    1
 2   1    2
 3   2    1
 4   2    2
 5   2    3

我应该得到结果

1,1
1,2
1,3
2,1
2,2
2,3

感谢您对此的任何帮助。

【问题讨论】:

  • 不清楚!!!输出背后的逻辑是什么
  • 你能猜出这个顺序吗:15, 16, 17, 23, 25, 26, 27, 28, 29, 30 oeis.org/A090461
  • 基于类型,我想重复结果集。因此,如果我需要类型 1 和类型 2 的所有组合。(类型 1 的值是 (1,2),类型 2 的值是 (1,2,3) 我希望得到 1,1 1,2 1 ,3 2,1 2,2 2,3)。
  • BTW Amritpal 和 glenn fyi,这称为笛卡尔积。所以格伦不用猜15、16、17、23、25、26、27、28、29、30...

标签: sql sql-server sql-server-2008


【解决方案1】:

看起来像:

SELECT t1.value, t2.value
  FROM table t1
  JOIN table t2
    ON t1.type = 1
   AND t2.type = 2
;

也可以写成:

SELECT t1.value, t2.value
  FROM ( SELECT value FROM table WHERE type = 1 ) t1
 CROSS
  JOIN ( SELECT value FROM table WHERE type = 2 ) t2
;

(前者更简单,但后者更清楚地表明这是一个语义上的CROSS JOIN,因为连接实际上并不依赖于连接记录之间的任何关系。)

【讨论】:

    【解决方案2】:
    SELECT ISNULL(CAST([type] as varchar(20)), '')
         + ','
         + ISNULL(CAST([value] as varchar(20)), '')
         AS CommaSeparated 
    FROM types
    

    【讨论】:

      猜你喜欢
      • 2020-01-03
      • 2014-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多