Sql 选择一系列行作为各种列

Sql 选择一系列行作为各种列,sql,sql-server,Sql,Sql Server,在SQL Server中,我们有下一种情况:有一个表看起来像这样 Id | Code | Value ----- | ----- | ----- 1 | 10 | 0 2 | 20 | 0 3 | 30 | 0 4 | 40 | 0 5 | 50 | 0 6 | 60 | 0 7 | 70 | 0 8 | 80 |

在SQL Server中,我们有下一种情况:有一个表看起来像这样

Id    | Code  | Value
----- | ----- | -----
1     |    10 |     0
2     |    20 |     0
3     |    30 |     0
4     |    40 |     0
5     |    50 |     0
6     |    60 |     0
7     |    70 |     0
8     |    80 |     0
9     |    90 |     0
10    |   100 |     0
我想创建此表的视图,如下所示:

Code1 | Value1 | Code2 | Value2 | Code3 | Value3 | Code4 | Value4
----- | ------ | ----- | ------ | ----- | ------ | ----- | ------
   10 |      0 |    40 |      0 |    70 |      0 |   100 |      0
   20 |      0 |    50 |      0 |    80 |      0 | 
   30 |      0 |    60 |      0 |    90 |      0 | 

我尝试过使用子查询,但总是返回多行,我认为在这种情况下不能使用透视。。。我该怎么做呢?

这是必须在应用程序端完成的事情。下面是一种在sql(静态方法)中使用批处理大小为3的方法

DECLARE @batch INT =3

SELECT *
FROM   Yourtable a
       LEFT JOIN Yourtable b
              ON a.[Id] = ( ( b.[Id] - 1 ) % @batch ) + 1
                 AND a.[Id] <> b.[Id]
                 AND b.[Id] BETWEEN @batch + 1 AND @batch * 2
       LEFT JOIN Yourtable c
              ON a.[Id] = ( ( c.[Id] - 1 ) % @batch ) + 1
                 AND a.[Id] <> c.[Id]
                 AND c.[Id] BETWEEN ( @batch * 2 ) + 1 AND @batch * 3
       LEFT JOIN Yourtable d
              ON a.[Id] = ( ( d.[Id] - 1 ) % @batch ) + 1
                 AND a.[Id] <> d.[Id]
                 AND d.[Id] BETWEEN ( @batch * 3 ) + 1 AND @batch * 4
WHERE  a.[Id] <= @batch 
DECLARE@batch INT=3
挑选*
从你的桌子上
左键连接表b
在a.[Id]=((b.[Id]-1)%@batch)+1上
和a[Id]b[Id]
以及@batch+1和@batch*2之间的b[Id]
左键连接表c
在[Id]=((c[Id]-1)%@batch)+1上
和a[Id]c[Id]
和介于(@batch*2)+1和@batch*3之间的c.[Id]
左键连接表d
在[Id]=((d[Id]-1)%@batch)+1上
和一个[Id]d[Id]
和介于(@batch*3)+1和@batch*4之间的d[Id]

其中,[Id]是报告引擎或前端应用程序的任务,而不是数据库服务器的任务;您想要的视图中没有数据关系。但是,您可能可以使用多个
pivot
s和
join
ing在不同列中的
code
s之间按您想要的间隔进行破解。。。不过,在错误的地方做演示似乎很麻烦。