1

SQL テーブルの 2 つの列にこのような値があるとします。

HM        BOX_NO

A          1
A          2
B          2
B          3
C          3

これらのテーブルの値を以下のように出力したいのですが、どうすればよいですか?

A
1
2
B
2
3
C
3
4

4 に答える 4

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
于 2012-08-22T15:30:54.397 に答える
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  
于 2012-08-22T15:35:38.657 に答える
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
;

これは SQL Fiddleのデモです。

于 2012-08-23T16:42:27.630 に答える
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
于 2012-08-22T17:03:40.973 に答える