在填充了1和0的sql中创建数据透视表

在填充了1和0的sql中创建数据透视表,sql,pivot-table,Sql,Pivot Table,我有表1,其中包含id[s1,s2,s3..Sn] s1 s2 s3 我有另一个表2,包含索引[0,1,2,…n] 0 1 2 3 我有第三个表3[ID,开始索引,停止索引]。例如: s0 | 1 | 3 | s0 | 4 | 6 | s1 | 1 | 2 | 等等。我想创建一个透视表,其中包含行s1、s2、s3。。。具有0,1,2,3。。表的内容应为零或1 ---|0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |... s0 |0 | 1 | 1 | 1 | 1

我有表1,其中包含id[s1,s2,s3..Sn]

s1
s2
s3
我有另一个表2,包含索引[0,1,2,…n]

0
1
2
3
我有第三个表3[ID,开始索引,停止索引]。例如:

s0 | 1 | 3 | 
s0 | 4 | 6 | 
s1 | 1 | 2 |
等等。我想创建一个透视表,其中包含行s1、s2、s3。。。具有0,1,2,3。。表的内容应为零或1

---|0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |...
s0 |0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
s1 |0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 
.
.

您可以将交叉联接与索引表配合使用,并透视最终结果

如果列数是可变的,则需要动态SQL

示例

 Select *
  From  (
        Select id 
              ,item = a.[index]
              ,value = case when a.[index] between b.start_index and b.stop_index then 1 else 0 end
          From  table2  A
          Cross Join table3 B 
        )  src
 Pivot (max(value) for Item in ([0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]) ) pvt
返回


您已经标记了两个非常不同的RDBMS;你到底在用什么?我已删除了冲突的标记,请重新标记正确的标记,并且只标记正确的标记。到目前为止,您尝试了什么,为什么没有成功?我认为
表2
是(有效的)他们的统计表。@Larnu再看一眼,您是对的。我会调整的