Il a été clarifié que la sortie doit être ordonnée de sorte qu'elle alterne entre col1 et col2. Col1 sera toujours affiché en premier, même si la valeur de col2 est inférieure. Ce:
Col1 | Col2
------------
11 | 2
30 | 42
..should retour:
ColumnName | ColumnValue
----------------------------
col1 | 11
col2 | 2
col1 | 30
col2 | 42
En effet, une liste alternative basée sur le classement.
La base de données utilisée par l'OP n'est pas claire. En supposant que MySQL, qui n'a pas de classement/fonctionnalité d'analyse, vous pouvez utiliser:
SELECT x.*
FROM (SELECT 'Col1' AS ColumnName,
a.col1 AS ColumnValue,
@rowcol1 := @rowcol1 + 1 AS rank
FROM TABLE a
JOIN (SELECT @rowcol1 := 0) r
UNION ALL
SELECT 'Col2',
b.col2,
@rownum := @rownum + 1
FROM TABLE b
JOIN (SELECT @rownum := 0) r) x
ORDER BY x.rank, x.columnname
SQL Server 2005+ et Oracle 9i + support des fonctions analytiques, de sorte que vous pouvez utiliser ROW_NUMBER ou RANK:
SELECT x.*
FROM (SELECT 'Col1' AS ColumnName,
a.col1 AS ColumnValue,
ROW_NUMBER() OVER(ORDER BY a.col1) AS rank
FROM TABLE a
UNION ALL
SELECT 'Col2',
b.col2,
ROW_NUMBER() OVER(ORDER BY b.col2) AS rank
FROM TABLE b) x
ORDER BY x.rank, x.columnname
Auparavant, sur la base sur les données d'exemple fourni:
SELECT 'Col1' AS ColumnName,
a.col1 AS ColumnValue
FROM TABLE a
UNION ALL
SELECT 'Col2',
b.col2
FROM TABLE b
ORDER BY ColumnValue
UNION ALL
renvoie toutes les lignes, tandis que UNION
supprimerait les doublons.
Quelle base de données utilisez-vous? – Alex
En ce qui concerne la commande, y a-t-il d'autres colonnes dans la table? Comme un «id»? –