Sql 选择一系列行作为各种列
在SQL Server中,我们有下一种情况:有一个表看起来像这样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 |
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之间按您想要的间隔进行破解。。。不过,在错误的地方做演示似乎很麻烦。