假设我们在SQL表的两列中有这样的值
HM BOX_NO
A 1
A 2
B 2
B 3
C 3
我想输出这些表值,如下所示 我怎样才能做到这一点?
A
1
2
B
2
3
C
3
答案 0 :(得分:2)
我假设您希望来自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
答案 1 :(得分:2)
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
答案 2 :(得分:2)
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
;
这是一个演示at SQL Fiddle。
答案 3 :(得分:1)
试试这个
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