Me pregunto si existe una forma canónica de convertir datos de formato largo a gran formato en SQLite (¿es esa operación generalmente en el dominio de las bases de datos relacionales?). Traté de seguir this example para MySQL, pero supongo que SQLite no tiene la misma construcción IF ... ¡Gracias!SQLite de formato largo a ancho?
11
A
Respuesta
12
IF
es una extensión de MySQL no estándar. Es mejor usar siempre CASE
que es SQL estándar y funciona en todas las bases de datos compatibles, incluidos SQLite y MySQL (y MSSQL, Oracle, Postgres, Access, Sybase ... y así sucesivamente).
Aquí hay un ejemplo de cómo hacer la misma consulta con CASE
:
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;
Ésta es otra manera de representar la misma consulta utilizando une. Creo que esto es probablemente más eficiente, pero supone que solo hay un registro para cada valor de clave dentro de cada grupo (la versión CASE
también lo hace, pero no dará lugar a filas adicionales si eso no es cierto, solo resultados poco predecibles).
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;
Y para que conste, aquí está el DDL y datos de prueba que estaba usando:
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');
Cuestiones relacionadas
- 1. Reformar formato ancho de datos de panel a formato largo
- 2. Remodelación de data.frame de formato ancho a largo
- 3. Convertir de formato largo a formato
- 4. Reformar el marco de datos de tres columnas a la matriz (formato "largo" a "ancho")
- 5. Largo a ancho con dos medidas repetidas
- 6. Mysql, remodele los datos de largo/alto a ancho
- 7. formato Windows camino corto a formato largo camino
- 8. medidas múltiples de ancho a largo cada vez
- 9. ¿Convertir NSDate a una cadena de formato largo y viceversa?
- 10. Formato de ancho de línea estándar
- 11. sqlite formato de marca de tiempo
- 12. CSS para etiquetas de formato dinámico ancho
- 13. Reformar los datos de largo a ancho, con el tiempo en el nuevo nombre de variable amplia
- 14. transposición/remodelar trama de datos sin "timevar" de largo a gran formato
- 15. ¿Es más rápido leer columnas de ancho fijo en SQLite?
- 16. Número de ancho fijo formato de pitón 3
- 17. C++ int frente a largo
- 18. Java: convertir largo a Timestamp
- 19. SQlite: formato de columna para timestamp unix; Tipos enteros
- 20. cómo consultar en sqlite para formato de fecha diferente
- 21. Remodelación de datos de series de tiempo de formato ancho a alto (para trazado)
- 22. Reformar columnas de valores múltiples en formato ancho
- 23. * Ancho de precisión y especificadores Con impulso :: formato
- 24. largo largo vs int multiplicación
- 25. ¿Cómo registrar un valor largo largo con NSLog?
- 26. milisegundos formato a formato SimpleDate
- 27. conversión de cadena a largo en pitón
- 28. Conversión de largo a doble en Java
- 29. Lat de largo a minutos y segundos?
- 30. ¿Cómo puedo convertir el formato de fecha y hora a fecha en SQLite?
muy útil !! Gracias, necesito más tiempo para asimilar tu segundo ejemplo, pero esto realmente amplía mi conocimiento de SQL. – hatmatrix