今回も備忘録としてあげますが、表題の通りにしたいが以下の様にすると、連番を含めてselect distinctするため、期待通りに動いてくれません。
SELECT prop_dsc1, row_number() OVER (PARTITION BY prop_dsc1 ORDER BY prop_dsc1) venodr_no FROM art_prop WHERE prop_name="vendor"; +-----------+-----------+ | prop_dsc1 | venodr_no | +-----------+-----------+ | ASRock | 1 | | ASRock | 2 | | ASRock | 3 | | ASRock | 4 | | ASRock | 5 | | MSI | 1 | +-----------+-----------+ 6 rows in set (0.000 sec)つまり、select distinctした後に連番をふればいいので、以下の様にします。
SELECT t_vendor.vendor, row_number() OVER (ORDER BY t_vendor.vendor) vendor_no FROM ( SELECT distinct prop_dsc1 AS vendor FROM art_prop WHERE prop_name="vendor" ) as t_vendor; +--------+-----------+ | vendor | vendor_no | +--------+-----------+ | ASRock | 1 | | MSI | 2 | +--------+-----------+ところで、PARTITION BYですが、PARTITION BY t_vendor.vendorを入れると、これも期待通りにならないので注意が必要です。
SELECT t_vendor.vendor, row_number() OVER (PARTITION ORDER BY t_vendor.vendor) vendor_no FROM ( SELECT distinct prop_dsc1 AS vendor FROM art_prop WHERE prop_name="vendor" ) as t_vendor; +--------+-----------+ | vendor | vendor_no | +--------+-----------+ | ASRock | 1 | | MSI | 1 | +--------+-----------+MariaDB10.5.12で動作確認しました。簡単ですが今回は以上です。それでは。
コメント
コメントを投稿