0

次のクエリがあります。

SELECT * 

FROM vendors_parts INNER JOIN 

vendors ON vendors_parts.vendor = vendors.vendor_id

WHERE (vendors_parts.vendor = @vendor_id) AND (vendors_parts.active = @active) OR

(vendors_parts.vendor = @vendor_id) AND (vendors_parts.active = @inactive)

ORDER BY vendors_parts.old_id, vendors_parts.vendor_part, date_start DESC, vendors_parts.active DESC

次の形式でデータを返します。

vendor_part      active       old_id
b                1            1
a                0            1
a                0            1
b                0            1
x                1            3
z                1            5
c                1            20
c                0            20

私の質問は、vendor_part の昇順とアクティブな降順を並べ替えながら、old_id をまとめて保持するにはどうすればよいですか? 私が望む出力は次のとおりです。

vendor_part      active       old_id
b                1            1
a                0            1
a                0            1
b                0            1
c                1            20
c                0            20
x                1            3
z                1            5

old_id でグループ化するサブクエリも試しましたが、これにより、一意の old_id が 1 つだけに制限されます。

SELECT *

FROM 
     (
     SELECT * FROM vendors_parts INNER JOIN vendors ON vendors_parts.vendor = vendors.vendor_id
     WHERE (vendors_parts.vendor = @vendor_id) AND (vendors_parts.active = @active) OR (vendors_parts.vendor = @vendor_id) AND (vendors_parts.active = @inactive)
     GROUP BY vendors_parts.old_id
     ) temp_table
ORDER BY vendor_part

グループ化され、それぞれのグループ内で vendor_part によってアルファベット順にソートされたすべての old_id を表示するにはどうすればよいですか?

ありがとうございました

4

1 に答える 1