2015-07-19 147 views
0

我有選擇的所有汽車的查詢,使並計算各使數量響應SQL Server查詢選擇

SELECT 
    q.Make, Count(q.ID) 
FROM 
    (SELECT 
     cars.ID, cars.Make, cars.Model, 
     cars.Year1, cars.Month1, cars.KM, cars.VIN, 
     cars.Fuel, cars.EngineCap, cars.PowerKW, 
     cars.GearBox, cars.BodyType, cars.BodyColor, 
     cars.Doors, cars.FullName, Transport.address, 
     (DateDiff(second,Getdate(),cars.AuEnd)) as r, 
     cars.AuEnd, cars.BuyNowPrice, cars.CurrentPrice 
    FROM 
     cars 
    LEFT JOIN 
     Transport ON Cars.TransportFrom = Transport.ID 
    WHERE 
     Active = 'True' 
     AND AuEnd > GETDATE() 
     AND year1 >= 1900 AND year1 <= 2015 
     AND Make in ('AUDi', 'AIXAM', 'ALPINA') 
    ORDER BY 
     cars.make ASC, cars.model ASC 
     OFFSET 50 ROWS FETCH NEXT 50 ROWS ONLY) AS q 
GROUP BY 
    q.make ORDER BY q.make ASC; 

現在我需要的結果作爲第三場得到各佔總數無偏移, 所以現在我得到結果

Make CountInResponse 
AIXAM 1     
ALPINA 1     
AUDI 48     

但我需要得到

Make CountInResponse Total 
AIXAM 1     1 
ALPINA 1     1 
AUDI 48    100 

我想,我需要這樣的東西

SELECT 
    q.Make, Count(q.ID), 
    (SELECT Make, Count(ID) 
    FROM cars 
    WHERE Active = 'True' AND AuEnd > GETDATE() 
     AND year1 >= 1900 AND year1 <= 2015 
     AND Make in ('AUDI', 'AIXAM', 'ALPINA') 
    GROUP BY Make) as q2 
FROM 
    (SELECT    
     cars.ID, cars.Make, cars.Model, 
     cars.Year1, cars.Month1, cars.KM, cars.VIN, 
     cars.Fuel, cars.EngineCap, cars.PowerKW, 
     cars.GearBox, cars.BodyType, cars.BodyColor, 
     cars.Doors, cars.FullName, Transport.address, 
     (DateDiff(second,Getdate(),cars.AuEnd)) as r, 
     cars.AuEnd, cars.BuyNowPrice, cars.CurrentPrice 
    FROM 
     cars 
    LEFT JOIN 
     Transport ON Cars.TransportFrom = Transport.ID 
    WHERE 
     Active = 'True' 
     AND AuEnd > GETDATE() 
     AND year1 >= 1900 AND year1 <= 2015 
     AND Make in ('AUDi', 'AIXAM', 'ALPINA') 
    ORDER BY 
     cars.make ASC, cars.model ASC 
     OFFSET 50 ROWS FETCH NEXT 50 ROWS ONLY) AS q 

但我得到一個錯誤

消息116,級別16,狀態1,10號線
只有一個表達式可以在選擇列表中指定當子查詢不會與EXISTS一起引入。

如何編寫正確的語法?

+0

首先,你需要告訴你有什麼價值'q2'顯示。你在'q2'(ie)'Make,Count(ID)'''你在'sql server''中不能這麼做''選擇兩列。 –

+0

Fisrt Count是用於總計的偏移查詢第二個無偏移量 –

回答

2

問題是你正在選擇q2(即)Make, Count(ID)中的兩列,你不能在SQL Server中做到這一點。

嘗試類似這樣的東西。

WITH cte AS 
( 
    SELECT  
     row_number() OVER(order by cars.make ASC,cars.model ASC) AS rn, 
     cars.id, cars.make 
    FROM  
     cars 
    LEFT JOIN 
     transport ON cars.transportfrom = transport.id 
    WHERE  
     active = 'True' 
     AND auend > getdate() 
     AND year1 >= 1900 AND year1 <= 2015 
     AND make IN ('AUDI', 'AIXAM', 'ALPINA') 
) 
SELECT 
    make , 
    count(CASE WHEN RN BETWEEN 50 AND 100 THEN 1 END) AS countinresponse, 
    count(1) AS total 
FROM 
    cte 
GROUP BY 
    make 

,或者您需要的sub-queryselect轉換爲correlated sub-query

SELECT q.make, 
     Count(q.id) countinresponse, 
     ( 
        SELECT Count(id) 
        FROM  cars C1 
        WHERE c1.id = q.id 
        AND  active='True' 
        AND  auend > Getdate() 
        AND  year1 >= 1900 
        AND  year1 <= 2015 
        AND  make IN ('AUDi', 
            'AIXAM', 
            'ALPINA') 
        GROUP BY make) AS total 
FROM  ( 
        SELECT cars.id, 
          cars.make 
        FROM  cars 
        LEFT JOIN transport 
        ON  cars.transportfrom=transport.id 
        WHERE  active='True' 
        AND  auend > Getdate() 
        AND  year1 >= 1900 
        AND  year1 <= 2015 
        AND  make IN ('AUDi', 
             'AIXAM', 
             'ALPINA') 
        ORDER BY cars.make ASC, 
          cars.model ASC offset 50 rowsfetch next 50 rows only) AS q 
GROUP BY q.make 
ORDER BY q.make ASC; 
+0

你確定他使用2012? –

+0

消息8120,級別16,狀態1,行6 列'q.id'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。 –

+0

@RoyiNamir - 是的,因爲他在他的查詢中使用它,錯誤不是關於'offset',所以我想它的'2012' –