Je choisis deux tables, une table de produit et une table d'expédition, et construisons le tableau ci-dessous, mais je voudrais split le produit $ valeur par le nombre de rangées par ID de sorte que le produit $ soit divisé entre toutes les rangées il apparaît sur. Existe-t-il un moyen de le faire dans l'instruction select au fur et à mesure que je construis la table?
Ce que j'ai:
ID | Product $ | Shipping $ --------------------------------- 123456 | 200.00 | 5.00 123456 | 200.00 | 10.00 123567 | 186.00 | 7.99
Ce que j'aimerais:
ID | Product $ | Shipping $ --------------------------------- 123456 | 100.00 | 5.00 123456 | 100.00 | 10.00 123567 | 186.00 | 7.99
Il est plus simple d'utiliser les fonctions de fenêtrage à la place des sous-requêtes:
SELECT [ID] ,[Product $] / COUNT(*) OVER(PARTITION BY [ID]) ,[Shipping $] FROM MyTable
SELECT ID, ([Product $]/(SELECT COUNT(id) FROM t t1 WHERE t1.id=t.id)) [Product $] , [Shipping $] FROM t
Avant de joindre la table de produits et d'expédition, vous pouvez calculer le prix du produit en fonction du nombre (comme dans la requête interne) et ensuite vous pouvez le joindre à la table d'expédition. À partir de la post-vue, vous pouvez utiliser la requête suivante comme reference:
SELECT ps.id ,t1.new_c ,ps.shipping FROM product_shipping ps INNER JOIN ( SELECT id ,product / count(1) new_c FROM product_shipping GROUP BY id ,product ) t1 ON ps.id = t1.id;
Depuis sqlfiddle est en panne, ici vous allez avec ideone
SELECT ID, ([Product $] / (SELECT COUNT(ID) FROM TABLE t2 WHERE t2.ID = TABLE.ID)) as [Product $], [Shipping $] FROM TABLE
Que dis-tu de ça
SELECT p.ID, (p.[Product $] / c.CNT ) as [Result] ( SELECT ID,sum([Product $]) as [Product $] FROM [table] group by ID ) p inner join ( SELECT ID,count(1) as CNT FROM [table] group by ID ) c on (p.ID = c.ID)