2017-07-12 8 views
-2

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 | 

、と私は考えていませんこの場合PIVOTを使うことができます...どうすればいいですか?

+2

としてバッチサイズとSQL(静的手法)でそれを行う方法でありますデータベースサーバ。必要なビューにはデータ関係はありません。しかし、おそらく、複数の 'ピボット'と一緒にそれをハックすることができますし、あなたが ''コード 'の間に必要な間隔で' join'ingすることができます...それは間違った場所しかし、。 –

答えて

3

これはアプリケーション側で行う必要があります。ここでは、レポート・エンジンのためのタスクまたはフロントエンドアプリケーションではありません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 
関連する問題