Data yang hilang MySQL menyertai sendiri
P粉464208937
P粉464208937 2024-03-31 10:07:32
0
1
358

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粉464208937
P粉464208937

membalas semua(1)
P粉563446579

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
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan