Verileri SQLite'deki uzuntan geniş formata dönüştürmenin kanonik bir yolu olup olmadığını merak ediyorum (bu işlem genellikle ilişkisel veritabanları alanında mıdır?). MySQL için this example'u takip etmeye çalıştım ama sanırım SQLite aynı IF yapısına sahip değil ... Teşekkürler!SQLite uzuntan geniş formatlar için?
11
A
cevap
12
IF
, standart olmayan bir MySQL uzantısıdır. Her zaman standart SQL olan CASE
'u kullanmak daha iyidir ve SQLite ve MySQL (ve MSSQL, Oracle, Postgres, Access, Sybase ... ve on) da dahil olmak üzere tüm uyumlu veritabanlarında çalışır.
Burada CASE
ile aynı sorguyu nasıl yapılacağına ilişkin bir örnek:
SELECT Country,
MAX(CASE WHEN Key = 'President' THEN Value ELSE NULL END) President,
MAX(CASE WHEN Key = 'Currency' THEN Value ELSE NULL END) Currency
FROM Long
GROUP BY Country
ORDER BY Country;
İşte katılır kullanarak aynı sorguyu temsil etmek başka bir yolu. Bunun muhtemelen daha verimli olduğunu düşünüyorum, ancak her gruptaki her bir anahtar değeri için sadece bir kayıt olduğunu varsayar (CASE
sürümü de vardır, ancak bu doğru değilse, ekstra satırlarla sonuçlanmayacaktır, sadece tahmin edilebilir sonuçlardan daha az).
SELECT
D.Country,
P.Value President,
C.Value Currency
FROM
(
SELECT DISTINCT Country
FROM Long
) D
INNER JOIN
( SELECT Country, Value
FROM Long
WHERE Key = 'President'
) P
ON
D.Country = P.Country
INNER JOIN
( SELECT Country, Value
FROM Long
WHERE Key = 'Currency'
) C
ON
D.Country = C.Country
ORDER BY
D.Country;
Ve kayıt için , burada DDL var ve test verileri ı kullanıyordu:
CREATE TABLE Long (ID INTEGER PRIMARY KEY AUTOINCREMENT, Country TEXT, Key TEXT, Value TEXT);
INSERT INTO Long VALUES (NULL, 'USA', 'President', 'Obama');
INSERT INTO Long VALUES (NULL, 'USA', 'Currency', 'Dollar');
INSERT INTO Long VALUES (NULL, 'China', 'President', 'Hu');
INSERT INTO Long VALUES (NULL, 'China', 'Currency', 'Yuan');
İlgili konular
- 1. Çok geniş açılan menü öğeleri için öneriler?
- 2. Scala için SQLite
- 3. Django - Geniş templatetags
- 4. LaTeX'te Çok Geniş Tablolar
- 5. İçerik ekrandan daha geniş
- 6. Sqlite Browser, sqlite
- 7. SQLite
- 8. arecord: set_params: 1233: Örnek formatı yok Kullanılabilir formatlar: - S16_LE
- 9. SQLite
- 10. SQLite
- 11. SQLite
- 12. SQLite
- 13. SQLite
- 14. sqlite
- 15. SQLite:
- 16. Android uygulaması için Sqlite şeması
- 17. SQLite
- 18. Sqlite
- 19. SQLite
- 20. SQLite
- 21. sqlite
- 22. SQLite
- 23. Geniş bir belge kümesini güncelleştirme
- 24. Geniş Faz Çarpışma Algılama - Karşılaştırma
- 25. Nasıl Google reCAPTCHA% 100 geniş
- 26. C++ 11: const ve formatlar üzerinde auto` `aksiyonu için standart ref bir tür T olduğunu varsayalım
- 27. Web2py geniş bir genel web sitesi için uygun mu?
- 28. Uygulama geniş değişkenlerini depolamak için ASP.Net MVC'deki "Uygulama" nesnesine erişme
- 29. Lua (Komut Satırı) Bunun için uzak ve geniş aramış yürütme
- 30. Geniş bir mobil aygıt yelpazesini hedeflemek için en iyi çerçeve
Çok yardımcı !! Teşekkür ederim - ikinci örneğinizi düzeltmek için daha fazla zamana ihtiyacım var ama bu gerçekten SQL bilgimi genişletiyor! – hatmatrix