0

上記のように、2 つの列と、たとえば 3 つの行を持つテーブルがあります。次に、このテーブルにビューを作成します。

このビューは、テーブルの各行に対して、この行に書かれている行数と同じ数の行を表示する必要があります。

この問題を解決する方法がわかりません。TSQL を使用してビューを作成する方法の例を教えてください。

例:

ここに画像の説明を入力

4

4 に答える 4

3

次のように、再帰 CTE を使用して値を分割できます。

;WITH CTE AS
(
    SELECT name, value
    FROM YourTable
    UNION ALL 
    SELECT name, value-1
    FROM CTE
    WHERE value-1 >= 1
)
SELECT t.name, t.value
FROM yourtable t
inner join CTE c
  on t.name = c.name
ORDER BY name, value
OPTION(MAXRECURSION 0)

デモで SQL Fiddle を参照してください

結果は次のとおりです。

|  NAME | VALUE |
-----------------
|  milk |     4 |
|  milk |     4 |
|  milk |     4 |
|  milk |     4 |
| sugar |     2 |
| sugar |     2 |
|   tea |     7 |
|   tea |     7 |
|   tea |     7 |
|   tea |     7 |
|   tea |     7 |
|   tea |     7 |
|   tea |     7 |
于 2013-01-15T11:26:01.010 に答える
2
WITH    q(n) AS
        (
        SELECT  1
        UNION ALL
        SELECT  n + 1
        FROM    q
        WHERE   n <
                (
                SELECT  MAX(repeats)
                FROM    mytable
                )
        )
SELECT  t.*
FROM    mytable t
JOIN    q
ON      q.n <= t.repeats
于 2013-01-15T11:23:42.067 に答える
2

このテーブルを、1、2、3、4、5、6、....の数字のフィールドを持つテーブルと結合する必要があります。例えば:

SQLFiddleデモ

with t0 as 
( select 1 n
  union all
  select 2 n
  union all 
  select 3 n 
 ),
tCount as
(select ROW_number() over (order by t1.n) rn
from t0,
     t0 as t1,
     t0 as t2,
     t0 as t3,
     t0 as t4
)
select t.* from t
join tCount on t.Number>=tCount.rn
order by name
于 2013-01-15T11:22:07.677 に答える
0

チェックしてください

;WITH T AS(
    SELECT 
        COl1, Col2, 1 AS NUM 
    FROM TableName

    UNION ALL

    SELECT 
        T1.COl1, T1.Col2, T.NUM+1 AS NUM 
    FROM TableName T1 INNER JOIN T ON T1.Col1=T.Col1
    WHERE T.NUM+1<=T1.Col2
)
SELECT COl1, Col2 FROM T ORDER BY COl1
于 2013-01-15T11:27:19.790 に答える