2017-09-30 4 views
0

J'ai actuellement une vue appelée v_testhorses qui extrait les données de Horses et Results. Il a les valeurs suivantes -Création d'une vue d'une autre vue

HID|HName|YOB|Gender|Sire|Dam|OName|Stable|LTE|Year 

LTE = la somme du champ earnings de Results et Year = une colonne individuelle créée pour chaque année

(par exemple, si cheval B a montré en 2012 et 2011 , j'aurais seulement des colonnes pour ces deux années avec des LTE séparés pour chaque année)

J'essaye de créer une vue en utilisant juste le champ Sire, en prenant ces autres choses en compte. Idéalement, il aurait l'air comme ça -

HID|HName|ProgenyEarnings|Year 

HName dans ce cas est basé sur Sire et ProgenyEarnings est la somme des LTE de tous les chevaux avec ce Sire. Ce serait un moyen de regarder tous les chevaux dans v_testhorses et de les "attribuer" à un père, qui est également dans la base de données v_testhorses. Ce serait la façon la plus facile de décider qui était le géniteur le plus rentable de chaque année en fonction de sa progéniture.

J'espère que cela a du sens! J'ai essayé le WHERE HName=Sire comme une clause et cela me donne une vue vide.

+0

Comment le même point de vue ont différentes années pour chaque cheval? Une vue ne peut pas créer des colonnes dynamiquement, ce qui ne peut être fait qu'avec du SQL dynamique dans une procédure stockée. – Barmar

Répondre

0

Vous devez joindre à la vue elle-même pour relier la descendance à son père:

SELECT h1.HID, h1.HName, SUM(h2.LTE) AS ProgenyEarnings, h1.Year 
FROM v_testhorses AS h1 
JOIN v_testhorses AS h2 ON h1.HName = h2.Sire 
GROUP BY h1.HID 
+0

Cela conduit à l'erreur suivante: 1104 - Le SELECT examinerait plus de MAX_JOIN_SIZE rangées; vérifiez votre WHERE et utilisez SET SQL_BIG_SELECTS = 1 ou SET MAX_JOIN_SIZE = # si le SELECT est correct –

+0

Vous devrez peut-être utiliser des tables temporaires au lieu de vues pour cela. – Barmar

+0

Hmm, j'espérais quelque chose que je pourrais appeler en utilisant PHP sur mon site Web –