sql >> Databasteknik >  >> RDS >> Mysql

SQL frågesats

SELECT sid, 'Math' as subject, math as mark
FROM your_table
UNION ALL
SELECT sid, 'English' as subject, english as mark
FROM your_table
UNION ALL
SELECT sid, 'French' as subject, french as mark
FROM your_table

Men grundorsaken till ditt problem är en felaktig databasdesign. Dessa ämnen bör inte vara kolumner i första hand och bör lagras i en tabell som mycket liknar din önskade utdata.

Redigera

Så vad gör det?

SELECT sid, 'Math' as subject, math as mark
FROM your_table

Returnerar sid kolumn, en "virtuell" kolumn med det hårdkodade värdet 'Math' som får namnet subject . Eftersom du inte har lagrat värdet 'Math' någonstans måste detta hårdkodas. Sedan väljer den äntligen också kolumnen math med namnet mark istället. Observera skillnaden mellan math och 'Math' - en är en kolumn den andra en bokstavlig sträng på grund av de enstaka citattecken.

Detta görs för alla tre ämnen (om du hade fyra ämnen skulle du behöva fyra delar i UNION)

UNION ALL kombinerar alla tre SELECT till en enda fråga. andr-lösning (som har röstats ned av någon som inte förstod det) gör detta ännu tydligare genom att uttryckligen lägga det i en härledd tabell (eller inline-vy).

Kör varje SELECT för sig för att se vad de enskilda delarna gör.

Delen as mark kallas ett "kolumnalias" och kan även användas för att hämta kolumner med samma namn från olika tabeller i en join och fortfarande ha unika namn i resultatuppsättningen.



  1. Giltiga tidssträngsformat för SQLites datum/tidsfunktioner

  2. PHP mysql beställningsrader

  3. 13 bloggartiklar om bästa praxis och tips för databasdesign

  4. Bästa metoder för att hålla lösenord i shell / Perl-skript?