2010-10-13 3 views
3

J'ai une colonne daycode qui stocke des valeurs telles que 1,2 ... 7
puis dans une autre table j'ai comme Col. field1,field2...field7Comment sélectionner une colonne composée par d'autres colonnes valeur

Je peux les rejoindre sur un key, mais comment puis-je sélectionner la colonne fieldX spécifique en fonction des valeurs transmises? Où chaque champX représente une valeur pour lundi, mardi et ainsi de suite jusqu'à dimanche.

Table 2 has the following columns 
------------- 
id 
prodno 
dt 
daycode 

Mise à jour

t2 a des colonnes comme champ1, champ2 ... field7, et les valeurs de daycode est 1,2 ... 7. Nous devons concat "champ" avec la valeur prise de colonne de code de jour.

select table1.id,select [concat('field',table2.daycode)] from table1 join 
table2 on table1.id=table2.key 
+0

Je ne comprenais pas la question! – vulkanino

+0

Veuillez fournir la structure des deux tableaux avec des exemples de données et la sortie attendue. – Oded

+0

Il serait utile si vous avez écrit les définitions des deux tables (éventuellement avec des valeurs) et ensuite montré ce que la jointure que vous voulez retourner. Je crois qu'il cherche un ensemble de résultats comme day1, field1 | day2, champ 2 | etc ... Si oui, c'est probablement une requête pivot. – Kendrick

Répondre

4

Vous pouvez créer l'instruction dans la chaîne EXECUTE puis à l'aide execute (@sql) ou vous pouvez ajouter une déclaration de cas dans la sélection où vous prendrez la colonne appropriée.

Je ne suis pas sûr aobut cela, mais vous pouvez essayer

SELECT t1.id, 
CASE 
    WHEN daycode = 1 THEN t2.field1 
    WHEN daycode = 2 THEN t2.field2 
    WHEN daycode = 3 THEN t2.field3 
    WHEN daycode = 4 THEN t2.field4 
END 
FROM t1 join t2 on t1.id=t2.key; 
+0

+1, seule façon de le faire est dynamique SQL @sql = 'select field' + table2.id '+' de ... 'Le SQL dynamique présentera des soucis de sécurité, donnez une recherche sur le web pour en savoir plus – Twelfth

+0

La meilleure façon est de corriger le mauvais design. – HLGEM

+0

Impossible de modifier la table car elle résulte d'un processus de synchronisation effectué par un autre service. – Pentium10

Questions connexes