/ / MS SQL Confusion w wielopoziomowym zapytaniu wyboru - sql, sql-server

MS SQL Confusion w wielopoziomowym wyborze zapytania - sql, sql-server

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 № 1

Jeś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.