Mam tabelę MS SQL z 9 zmiennymi:
Table (var1, var2, var3 ... var9)
Napisałem następujące zapytanie:
SELECT var1, COUNT(var10)
FROM (
SELECT *, (CASE WHEN ABS(var1 - var2) >= 1 THEN 1 ELSE 0 END) as var10
FROM DB.Table_Name
GROUP BY var 3
ORDER BY var 3
)
Otrzymuję błędy:
Klauzula ORDER BY jest nieprawidłowa w widokach, funkcjach wbudowanych, pochodnych tabele, podzapytania i wspólne wyrażenia tabel, chyba że TOP, OFFSET lub określono również FOR XML.
Nie wiem, co robię źle tutaj ...
To, czego chcę, to:
Dodaj jeszcze jedną zmienną Var10 do tabeli, w zależności od warunku:
(CASE WHEN ABS(var1 - var2) >= 1 THEN 1 ELSE 0 END)
Następnie obliczyć:
The counts of Var10 Grouped By Var3 and in descending order
Czy ktoś mógłby ci pomóc?
Przykładowe dane:
Var1 Var2 Var3 Var4 Var5 Var6 Var7 Var8 Var9
2 1 ABC123BCUSUS130356 69 513008 32:13.0 32:26.3 95662 01/01/2016 6:27:44
2 1 ABC123BCUSUS130351 69 513013 38:29.6 38:41.9 95684 01/02/2016 6:27:44
3 2 ABC123BCUSUS130356 69 513036 20:05.6 20:19.7 95800 01/02/2016 6:27:44
2 1 ABC123BCUSUS130352 69 513041 30:51.1 31:04.0 95829 01/03/2016 6:27:44
2 4 ABC123BCUSUS130356 69 513047 45:02.6 45:12.2 95855 01/01/2016 6:27:44
2 1 ABC123BCUSUS130356 69 513048 47:46.5 47:59.3 95863 01/01/2016 6:27:44
3 1 ABC123BCUSUS130353 69 513052 51:13.5 51:27.4 95879 01/02/2016 6:27:44
2 5 ABC123BCUSUS130356 69 513064 06:46.7 06:47.5 95945 01/01/2016 6:27:44
2 1 ABC123BCUSUS130356 69 513069 18:49.4 19:03.0 95971 01/03/2016 6:27:44
2 2 ABC123BCUSUS130354 69 513077 43:21.0 43:34.9 96008 01/01/2016 6:27:44
2 1 ABC123BCUSUS130356 69 513079 46:12.1 46:12.6 96021 01/02/2016 6:27:44
4 1 ABC123BCUSUS130352 69 513084 53:00.1 53:13.9 96048 01/01/2016 6:27:44
2 1 ABC123BCUSUS130356 69 513091 01:28.4 01:40.7 96081 01/01/2016 6:27:54
2 1 ABC123BCUSUS130353 69 513104 32:54.4 33:19.3 96138 01/03/2016 6:27:54
5 3 ABC123BCUSUS130356 69 513108 36:09.5 36:23.1 96159 01/01/2016 6:27:54
2 1 ABC123BCUSUS130356 69 513121 03:09.0 03:21.7 96228 01/01/2016 6:27:54
2 1 ABC123BCUSUS130352 69 513123 09:03.6 09:17.4 96242 01/02/2016 6:27:54
5 1 ABC123BCUSUS130356 69 513127 11:33.0 11:45.9 96260 01/01/2016 6:27:54
2 4 ABC123BCUSUS130352 69 513138 33:01.5 33:14.8 96315 01/03/2016 6:27:54
3 1 ABC123BCUSUS130356 69 513147 44:40.7 44:59.5 96355 01/01/2016 6:27:54
1 4 ABC123BCUSUS130356 69 513149 53:04.2 53:04.6 96368 01/01/2016 6:27:54
2 1 ABC123BCUSUS130356 69 513152 00:00.5 00:13.3 96386 01/01/2016 6:27:54
Załóżmy, że jest to przykładowe zapytanie do tworzenia Var10:
Var3 Var10
ABC123BCUSUS130351 1
ABC123BCUSUS130352 1
ABC123BCUSUS130353 1
ABC123BCUSUS130353 1
ABC123BCUSUS130356 2
ABC123BCUSUS130352 1
ABC123BCUSUS130355 2
ABC123BCUSUS130354 3
ABC123BCUSUS130356 1
ABC123BCUSUS130356 0
ABC123BCUSUS130354 1
ABC123BCUSUS130355 3
ABC123BCUSUS130351 1
ABC123BCUSUS130352 1
ABC123BCUSUS130352 2
ABC123BCUSUS130356 1
ABC123BCUSUS130356 1
ABC123BCUSUS130356 4
ABC123BCUSUS130356 2
ABC123BCUSUS130356 2
ABC123BCUSUS130356 3
ABC123BCUSUS130356 1
Następnie wynik końcowy powinien wyglądać następująco:
Var3 Count(Var10)
ABC123BCUSUS130356 10
ABC123BCUSUS130352 5
ABC123BCUSUS130355 5
ABC123BCUSUS130354 4
ABC123BCUSUS130351 2
ABC123BCUSUS130353 2
Odpowiedzi:
1 dla odpowiedzi № 1Jeśli dobrze zrozumiałem, że wymagasz od ciebie, to możesz tego szukać
SELECT var3, SUM(var10)
FROM (
SELECT var3,
(CASE WHEN ABS(var1 - var2) >= 1 THEN 1 ELSE 0 END) as var10
FROM DB.Table_Name
)M
GROUP BY var3
ORDER BY var3
1 dla odpowiedzi nr 2
W ogóle nie potrzebujesz podzapytania. Wierzę, że zamierzasz:
SELECT var3,
SUM(CASE WHEN ABS(var1 - var2) >= 1 THEN 1 ELSE 0 END) as var10
FROM DB.Table_Name
GROUP BY var3
ORDER BY var3;
count
na var10
nie ma sensu ani nie przynosi rezultatów, których naprawdę chcesz.