2017-08-01 3 views
0

J'ai cette requête SQLComment utiliser les deux colonnes pour obtenir le résultat de la troisième colonne

SELECT 
    SERVERPROPERTY('MachineName') AS FoodServer, 
    SUM(Extended * Multiplier) AS GrossSale, 
    (SELECT 
    COUNT(*) 
    FROM FinishedTransaction) 
    AS counts 
FROM finishedsales fs 
LEFT JOIN FinishedTransaction ft 
    ON fs.TransactionNo = ft.TransactionNo 

Maintenant, je veux obtenir le quotient de GrossSale colonne et compte colonne et montrer à la troisième colonne. . J'ai essayé cette requête ci-dessous, mais il ne fonctionne pas ..

SELECT 
    SERVERPROPERTY('MachineName') AS FoodServer, 
    SUM(Extended * Multiplier) AS GrossSale, 
    (SELECT 
    COUNT(*) 
    FROM FinishedTransaction) 
    AS counts, 
    (GrossSale/counts) AS result 
FROM finishedsales fs 
LEFT JOIN FinishedTransaction ft 
    ON fs.TransactionNo = ft.TransactionNo 

cette solution de rechange fonctionne ..

SELECT 
    SERVERPROPERTY('MachineName') AS FoodServer, 
    SUM(Extended * Multiplier) AS GrossSale, 
    (SELECT 
    COUNT(*) 
    FROM FinishedTransaction) 
    AS counts, 
    SUM(Extended * Multiplier)/(SELECT 
    COUNT(*) 
    FROM FinishedTransaction) 
    AS result 
FROM finishedsales fs 
LEFT JOIN FinishedTransaction ft 
    ON fs.TransactionNo = ft.TransactionNo 

Mais je ne veux pas cette solution parce que c'est un peu verbeux, et une mauvaise performance. Je veux savoir la meilleure solution pour ce problème

Répondre

4

Je ne vois rien de mal avec votre solution, vous pouvez aimer cela mieux mais je doute que vous obtiendrez de bien meilleures performances.

Select Foodserver, GrossSale, Counts, (GrossSale/counts) as result  
    FROM 
    (
     SELECT SERVERPROPERTY ('MachineName') as FoodServer, 
     SUM(Extended * Multiplier) as GrossSale, 
     (SELECT COUNT(*) FROM FinishedTransaction) as counts 

     FROM finishedsales fs LEFT JOIN FinishedTransaction ft 
     ON fs.TransactionNo = ft.TransactionNo 
    ) as salesData 

nb. vous devez ajouter diviser par zéro vérifier ici aussi .. Je pense que where GrossSale <>0 AND Counts <>0 devrait le faire.