0

私はしばらくの間、この問題にかなり悩まされています..

列 B の内容に応じて列 A を並べ替えるにはどうすればよいですか?

私はこのサンプルを持っています:

ID  count   columnA     ColumnB
-----------------------------------
12  1      A         B
13  2      C         D
14  3      B         C

次のように並べ替えたい。

ID  count   ColumnA     ColumnB
-----------------------------------
12  1   A       B
14  3   B       C
13  2   C       D

そのため、前の行ColumnB= 次の行の場合、行を並べ替える必要がありますColumnA

私はループを考えていますか?しかし、それがどのように機能するかはまったく想像できません...

こうなると思ってた(多分)

SELECT 
    a.ID, a.ColumnA, a.ColumnB
FROM 
    TableA WITH a (NOLOCK)
LEFT JOIN 
    TableA b WITH (NOLOCK) ON a.ID = b.ID AND a.counts = b.counts
WHERE
    a.columnB = b.ColumnA

上記のコードは機能していませんが、次の行についてもっと考えていました...

DECLARE @counts int = 1
DECLARE @done int = 0

--WHILE @done = 0
BEGIN

SELECT 
    a.ID, a.ColumnA, a.ColumnB
FROM 
    TableA WITH a (NOLOCK)  
LEFT JOIN 
    TableA b WITH (NOLOCK)  ON a.ID = b.ID AND a.counts = @counts
WHERE 
    a.columnB = b.ColumnA

set @count = @count +1
END

これが C コードであれば、私にとっては簡単ですが、T-SQL の構文により、私のような初心者にとっては少し難しくなっています。

どんな助けでも大歓迎です!

編集:サンプルコード

drop table tablea
create table TableA(
id int,
colA varchar(10),
colb varchar(10),
counts int
)

insert INTO TableA
(id, cola, colb, counts)
select 12, 'Bad', 'Cat', 3

insert INTO TableA
(id, cola, colb, counts)
select 13, 'Apple', 'Bad', 1

insert INTO TableA
(id, cola, colb, counts)
select 14, 'Cat', 'Dog', 2

select * FROM TableA

SELECT a.ID, a.ColA, a.ColB
FROM TableA a WITH (NOLOCK) 
LEFT JOIN TableA b WITH (NOLOCK) 
     ON a.ID = b.ID
Where a.colB = b.ColA
ORDER BY a.ColA ASC
4

1 に答える 1

0

ORDER BY句を追加するだけです

-- SELECT a.ID, a.ColumnA, a.ColumnB
-- FROM TableA WITH a (NOLOCK) 
--        LEFT JOIN TableA b WITH (NOLOCK) 
--            ON a.ID = b.ID
--               and a.counts = b.counts
-- Where a.columnB = b.ColumnA
ORDER BY a.ColumnA ASC
于 2012-10-27T16:57:26.650 に答える