SQL テーブルの 2 つの列にこのような値があるとします。
HM BOX_NO
A 1
A 2
B 2
B 3
C 3
これらのテーブルの値を以下のように出力したいのですが、どうすればよいですか?
A
1
2
B
2
3
C
3
SQL テーブルの 2 つの列にこのような値があるとします。
HM BOX_NO
A 1
A 2
B 2
B 3
C 3
これらのテーブルの値を以下のように出力したいのですが、どうすればよいですか?
A
1
2
B
2
3
C
3
HM の各値の下に表示される、BOX_NO の値を持つ HM の個別の値が必要であると想定しています。
あなたはこれを行うことができます。おそらくあなたが予想していたよりも複雑です:
select val
from ((select distinct hm as val, 1 as ishm,
dense_rank() over (order by HM) as ranking
from t
) union all
(select cast(box_no as varchar(255)), 0 as ishm,
dense_rank() over (order by HM) as ranking
from t
)
) a
order by ranking, ishm desc, val
CREATE TABLE #t
([HM] varchar(1), [BOX_NO] int);
INSERT INTO #t
([HM], [BOX_NO])
VALUES
('A', 1),
('A', 2),
('B', 2),
('B', 3),
('C', 3);
SELECT item
FROM (
SELECT DISTINCT HM as item, HM as display_order
FROM #t
UNION ALL
SELECT CAST([BOX_NO] AS VARCHAR(10)), HM + CAST([BOX_NO] AS VARCHAR(10))as display_order
FROM #t
) a
ORDER BY display_order
SELECT
Value = COALESCE(CAST(BOX_NO AS varchar(10)), HM)
FROM (
SELECT HM, BOX_NO FROM atable
UNION ALL
SELECT DISTINCT HM, NULL FROM atable
) s
ORDER BY HM, BOX_NO
;
これは SQL Fiddleのデモです。
これを試して
Declare @t Table([HM] varchar(1), [BOX_NO] int);
INSERT INTO @t([HM], [BOX_NO])
VALUES
('A', 1),
('A', 2),
('B', 2),
('B', 3),
('C', 3);
;With Cte As(
Select
Rn
,HM
,BOX_NO
,HM_Grouping = HM + Cast(Rn As Varchar(1))
From (Select Rn = Row_Number() Over(Partition By HM Order by HM),*
From @t)x)
Select HM
From
(Select HM,Position = HM
From Cte Where Rn = 1
Union All
Select Cast(BOX_NO As Varchar(1)),HM_Grouping
From Cte)x
Order by Position
結果
HM
A
1
2
B
2
3
C
3