私はしばらくの間、この問題にかなり悩まされています..
列 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