Rumah > Soal Jawab > teks badan
Saya ingin melakukan penyambungan sendiri di atas meja untuk membentangkan nilai dari segi lajur. Untuk setiap objek, terdapat berbilang sifat (sehingga had yang diketahui), tetapi tidak semua sifat untuk semua objek disimpan. Saya telah mencuba pelbagai gabungan tetapi sentiasa ada baris yang hilang dan saya mahukan nilai nol.
Meja permulaan:
ID Objek | Hartanah | Nilai |
---|---|---|
1 | satu | 10 |
1 | b | 20 |
1 | c | 30 |
2 | satu | 15 |
2 | c | 25 |
Matlamat saya (dengan andaian saya tahu tiga sifat yang mungkin adalah a,b,c
) ialah
ID Objek | satu | b | c |
---|---|---|---|
1 | 10 | 20 | 30 |
2 | 15 | 25 |
P粉5634465792024-04-01 09:26:44
Anda boleh menggunakan pertanyaan berikut untuk mencapainya:
SELECT ObjectID, SUM(CASE WHEN Attribute = 'a' THEN Value ELSE NULL END) AS a, SUM(CASE WHEN Attribute = 'b' THEN Value ELSE NULL END) AS b, SUM(CASE WHEN Attribute = 'c' THEN Value ELSE NULL END) AS c FROM mytable GROUP BY ObjectID
Penerangan:
Gunakan nilai CASE
语句,我们选择 Attribute
untuk nilai tertentu, iaitu "a", "b", dsb. Jadi untuk lajur tertentu itu, hanya nilai atribut tertentu itu dipilih.
Nilai berbilang baris menggunakan SUM
我们聚合 Value
字段的值。这样,任何 ObjectID
akan diagregatkan menjadi satu baris.
Kalau tak nak guna SUM
因为您可能有非数字值,您可以按照 @xQbert 的建议使用 MAX
macam ni:
SELECT ObjectID, MAX(CASE WHEN Attribute = 'a' THEN Value ELSE NULL END) AS a, MAX(CASE WHEN Attribute = 'b' THEN Value ELSE NULL END) AS b, MAX(CASE WHEN Attribute = 'c' THEN Value ELSE NULL END) AS c FROM mytable GROUP BY ObjectID