Rumah  >  Soal Jawab  >  teks badan

Data yang hilang MySQL menyertai sendiri

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粉464208937P粉464208937183 hari yang lalu274

membalas semua(1)saya akan balas

  • P粉563446579

    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

    balas
    0
  • Batalbalas