2017-08-01 179 views
0

的结果,我有这样的SQL查询如何使用两列获得第三列

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 

现在,我想GrossSale列,数列的商,它展示给第三列。我试过低于这个查询,但它不工作..

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 

这个替代的解决方案是工作..

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 

但我不想要那个解决方案,因为那有点罗嗦,而且性能差。我想知道这个问题的最佳解决方案

回答

4

我没有看到你的解决方案有什么问题,你可能会喜欢这个更好,但我怀疑你会得到更好的性能。

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。你也应该在这里加上除零检查。我认为where GrossSale <>0 AND Counts <>0应该这样做。