Je cherche à mettre en place une requête SQL pour une table de type matrice pour sélectionner une certaine valeur (qui peut apparaître dans l'une ou l'autre colonne), puis basculer les colonnes id afin que la valeur de recherche apparaisse toujours sur le côté gauche.
J'ai du mal à l'expliquer de manière cohérente pour rechercher une réponse, mais voici un exemple:
Table DB
id1 | id2 | value
----|-----|-------
1 | 4 | 0.2
2 | 1 | 0.3
3 | 1 | 0.5
2 | 3 | 0.1
Sortie souhaitée si je recherche la valeur 1, notez la position de commutation des deux dernières colonnes:
id1 | id2 | value
----|-----|-------
1 | 4 | 0.2
1 | 2 | 0.3
1 | 3 | 0.5
Mon SQL actuel est le suivant:
SELECT (id1, id2, value) FROM db-table WHERE 1 in (id1, id2);
Qui obtient les valeurs correctes, mais sans permutation. Le résultat est:
id1 | id2 | value
----|-----|-------
1 | 4 | 0.2
2 | 1 | 0.3
3 | 1 | 0.5
J'utilise sqlite3 mais je peux traduire / résoudre des problèmes spécifiques à un domaine si quelqu'un est capable de me diriger dans la bonne direction. Merci!
4 réponses
Vous pouvez utiliser la requête ci-dessous. Son fonctionne bien.
créer et insérer des valeurs
create table #table1
(
id1 int,
id2 int,
val nvarchar(20)
)
insert into #table1 values (1,4,0.2);
insert into #table1 values (2,1,0.3);
insert into #table1 values (3,1,0.5);
insert into #table1 values (2,3,0.1);
écrire ci-dessous la requête pour obtenir le résultat
select * from (
SELECT id1 ,id2, val FROM #table1 where id1 = 1
union
SELECT id2 ,id1, val from #table1 where id2 = 1
) t
order by t.val asc
voilà le résultat.
~ acclamations
Vous voulez dire quelque chose de plus comme:
SELECT * FROM
(
SELECT
CASE WHEN id1 < id2 THEN id1 ELSE id2 END as id1,
CASE WHEN id1 < id2 THEN id2 ELSE id1 END as id2,
value
FROM db-table
) a
WHERE id1 = 1
ORDER BY value
Est-ce que ça fait ce que tu veux,
Select IIF(id1<=id2,id1,id2) id1, iif(id1>id2,id1,id2) id2,value
From table
Si IIF
n'est pas valide dans l'instruction SQLite
, essayez CASE
.
Select case when id1<=id2 then id1 else id2 end id1,
Case when id1>id2 then id1 else id2 end id2
From table
Where 1 in (id1,id2)
Quelque chose comme ça:
select 1 as id1,
(case when id1 = 1 then id2 else id1 end) as id2,
value
from t
where 1 in (id1, id2)
order by value;
De nouvelles questions
sql
Le langage de requête structuré (SQL) est un langage permettant d'interroger des bases de données. Les questions doivent inclure des exemples de code, une structure de table, des exemples de données et une balise pour l'implémentation du SGBD (par exemple MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, etc.) utilisés. Si votre question concerne uniquement un SGBD spécifique (utilise des extensions / fonctionnalités spécifiques), utilisez plutôt la balise de ce SGBD. Les réponses aux questions marquées avec SQL doivent utiliser le standard SQL ISO / IEC.