łączenie w jeden raport wielokrotnego zapytanie do tej samej tabeli

0

Witam wszystkich!

Otóż mam tabelę na SQL Express, która ma strukturę mniej więcej taką

ID - int
LUD - datetime
WADA_1 - bit
WADA_2 - bit
..
WADA_N - bit

jest to log z maszyny produkcyjnej.

Potrzebuję wykonać raport, który pogrupuje i policzy wady o wartości 1 dla poszczególnych tygodni w roku

ROK | TYDZIEŃ | WADA_1 | WADA_2 | ... | WADA_N |

Jak to zrobić?

1
set datefirst 1; -- w zależnosci od ustawien jezyka

SELECT ID, datepart(week, LUD) WK, 
SUM(CASE WHEN  WADA_1 = 1 THEN 1 ELSE 0 END) W1,
SUM(CASE WHEN  WADA_2 = 1 THEN 1 ELSE 0 END) W2,
...
SUM(CASE WHEN  WADA_n = 1 THEN 1 ELSE 0 END) Wn
GROUP BY ID, datepart(week, LUD)
0

Dzięki, ale wywala mi taki błąd

Msg 4145, Level 15, State 1, Line 4
An expression of non-boolean type specified in a context where a condition is expected, near 'THEN'.

Zapytanie jakie wpisałem
SET datefirst 1; -- w zależnosci od ustawien jezyka

SELECT ID, datepart(week, LUD) WK,
SUM(CASE WHEN LeftCapNotOK THEN 1 ELSE 0 END) LC,
SUM(CASE WHEN LeftMgoCtrlNotOK THEN 1 ELSE 0 END) LMg,
SUM(CASE WHEN LeftCenteringNotOK THEN 1 ELSE 0 END) LCe
from dbo.T_DATALOG_MASTER
GROUP BY ID, datepart(week, LUD)

0

Sorki, =1 nie wpisałem.
Teraz działa, choć wyniki są inne niż przy pojedynczym zapytaniu dla poszczególnych parametrów. Potestuję to się odezwę.
Dzięki za pomoc.

0

A gdzie masz warunek spełniający ? "WHEN LeftCapNotOK " jest równe co ?? żeby wstawił 1 jeśli spełnione a 0 jak nie ?
Spójrz na mój przykład dokładnie .. i może poczytaj o CASE tak w ogóle ;)

Edit: Nooo własnie ;)

0

No i mam taką sytuację

Zapytanie nr 1
SELECT datepart(yy,lud) as Rok, datepart(ww, LUD) as Tydzień,
SUM(CASE WHEN LeftCenteringNotOK=1 or RightCenteringNotOK=1 THEN 1 ELSE 0 END) Centrowanie_Braki
from dbo.T_DATALOG_MASTER
GROUP BY datepart(yyyy,lud), datepart(week, LUD)
order by Rok, Tydzień

Wynik:
Rok Tydzień Centrowanie_Braki
2018 4 687
2018 5 307
2018 6 81

Zapytanie nr 2

SELECT DATEPART(YYYY, LUD) AS Year, DATEPART(ww, LUD) AS Week, COUNT(ID) AS Centering_scrap
FROM dbo.T_DATALOG_MASTER
WHERE (LeftCenteringNotOK = 1) OR (RightCenteringNotOK = 1)
GROUP BY DATEPART(YYYY, LUD), DATEPART(ww, LUD)

Wynik:
Year Week Centering_scrap
2018 4 613
2018 5 330
2018 6 131

Skąd rozbieżności? Teoretycznie COUNT i SUM powinny policzyć to samo...

0
BlackBad napisał(a):

Spójrz na mój przykład dokładnie .. i może poczytaj o CASE tak w ogóle ;)

No właśnie poczytałem i dlatego wywaliłem =1 :) Zła interpretacja z mojej strony wyrażenia Boolean_expression z helpa. No cóż czytać to trzeba umić ;)

0

Skąd rozbieżności? Teoretycznie COUNT i SUM powinny policzyć to samo...

No to pojechałeś ...
No ale skoro pytasz ... to Ci odpowiem. W pierwszym zapytaniu robisz selecta z całej tabeli, grupujesz i jeśli jakiś tam warunek jest spełniony to dajesz 1 lub 0, potem sumujesz wszystkie rekordy, W drugim zapytaniu robisz selecta do części tabeli WHERE (LeftCenteringNotOK = 1) OR (RightCenteringNotOK = 1) i zliczasz ilość wystąpień

0

Witam jestem początkujący
ale czy nie wystarczyło by
select to_char((Lud,'YYYY'), to_char((Lud,'WW'), sum(wada_1), from tabela
where wada_1 =1
group by to_char((Lud,'YYYY'), to_char((Lud,'WW')

pisane pod oracle i na szybko ale chodzi mi bardziej o logikę
posortuje nam najpierw tam gdzie jwada_1 = 1
a potem pogrupuje po roku i tyg

0

po pierwsze nie posortuje bo od sortowania jest opcja order by, po drugie nie do końca bo logika w oracle jest trójwartościowa czyli 0, 1 i null. Nie pamiętam dokładnie jak się to zachowa w przypadku null ale nie ważne. Jeśli zrobisz where wada_1 = 1 to pominiesz wszystkie rekordy gdzie wada_1 <> 1 czyli np wada_1 = 2. Różnica między sum i count jest taka, że jeśli masz wada_1 = 1 i wada_1 = 2 to sum zwróci Ci 3, a count zwróci Ci 2. Nie do końca rozumiem czy chcesz zliczyć sumę wszystkich wada_1 z całej tabeli czy chcesz mieć ilość wystąpień wada_1 = 1. Nie mniej jednak oracle ma rewelacyjne funkcje okienkowe do raportów jak cube, rollup czy grouping sets ale to już nieco wyższa szkoła jazdy. I NAJWAŻNIEJSZE FORMATUJ KOD!!!!!

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0