Pętla w pętli sql

0

Potrzebuje pomocy ...

Mam querry które generuje tabele z wynikami i jest ona tworzona raz w tygodniu w czwartek na zasadzie pętli zmienna +1
data tego konkretnego wydarzenia pochodzi z CTE wiec nie mogę się o nią zapytać w zmiennej
teraz pojawił się problem bo mecze rozgrywane są 2 razy w tygodniu i wtedy dostaje błędna tabele dla jednego z tych wydarzeń
Daty trzymam w tabelce podzielone na tygodnie i pierwsza pętla opiera się na id_week + 1 który odpowiada datom z tego tygodnia

Nie za bardzo wiem jak mógłbym powiązać teraz te mecze w środku tygodnia z druga pętla jak mogą być one rozgrywane w wt/sr/czw

Jakieś pomysły / podpowiedzi ?

2

Samo slowo pętla w kontekście SQL-a brzmi źle ;) Bez pokazania tego co robisz ja nie potrafię nic doradzić...

0

OK poniżej querry i dane
mogę tez przebudować tabele tygodnie jeżeli będzie to koniecznie

declare 
@d	smallint, 
@d2	smallint
set @d = 535
set @d2 = 565

while @d < @d2
Begin 

with dane as (
  select         country        ,Season        ,data        ,home team        ,hg        ,ag 
    from 
        MECZE
		where data < (select data_end from tygodnie where id_week = @d) 
    union 
    select         country        ,Season        ,data        ,away team        ,ag        ,hg 
	    from
        MECZE 
		where data < (select data_end from tygodnie where id_week = @d)	
) 
,last5 as (
select * from (
    select  * ,row_number() over (partition by country ,team order by data desc) as mecz
    from 
        dane) X
    where         mecz <= 5
)
,punkty as (
select 
	ROW_NUMBER() OVER( ORDER BY (sum(case when hg > ag then 3 else 0 end + case when hg = ag then 1 else 0 end )) desc,(sum(hg) - sum(ag))desc, (sum(hg)) desc ) AS Pozycja ,
    team, 
    sum(case when hg is null then 0 else 1 end ) MP, 
    count(case when hg > ag then 1 end) W, 
    count(case when hg = ag then 1 end) D, 
    count(case when hg < ag then 1 end) L,
    sum(hg) GF,
    sum(ag) GA,
    sum(hg) - sum(ag) GD,
    sum(case when hg > ag then 3 else 0 end + case when hg = ag then 1 else 0 end) Pts
from 
    dane

group by     country    ,team 
)
select * from punkty
	  SET @d = @d + 1
	 END
536	40499	2010-11-17	40505	2010-11-23
537	40506	2010-11-24	40512	2010-11-30
538	40513	2010-12-01	40519	2010-12-07
539	40520	2010-12-08	40526	2010-12-14
540	40527	2010-12-15	40533	2010-12-21
541	40534	2010-12-22	40540	2010-12-28
542	40541	2010-12-29	40547	2011-01-04
543	40548	2011-01-05	40554	2011-01-11
544	40555	2011-01-12	40561	2011-01-18
545	40562	2011-01-19	40568	2011-01-25
546	40569	2011-01-26	40575	2011-02-01
547	40576	2011-02-02	40582	2011-02-08
548	40583	2011-02-09	40589	2011-02-15
549	40590	2011-02-16	40596	2011-02-22
550	40597	2011-02-23	40603	2011-03-01
551	40604	2011-03-02	40610	2011-03-08
552	40611	2011-03-09	40617	2011-03-15
553	40618	2011-03-16	40624	2011-03-22
554	40625	2011-03-23	40631	2011-03-29
555	40632	2011-03-30	40638	2011-04-05
556	40639	2011-04-06	40645	2011-04-12
557	40646	2011-04-13	40652	2011-04-19
558	40653	2011-04-20	40659	2011-04-26
559	40660	2011-04-27	40666	2011-05-03
560	40667	2011-05-04	40673	2011-05-10
561	40674	2011-05-11	40680	2011-05-17
562	40681	2011-05-18	40687	2011-05-24
563	40688	2011-05-25	40694	2011-05-31
564	40695	2011-06-01	40701	2011-06-07
201	France	Ligue 1	2010/2011	06.11.2010	21:00:00.0000000	Arles	Caen	3	2	H
202	France	Ligue 1	2010/2011	06.11.2010	21:00:00.0000000	Bordeaux	Valenciennes	1	1	D
203	France	Ligue 1	2010/2011	06.11.2010	21:00:00.0000000	Rennes	Lyon	1	1	D
204	France	Ligue 1	2010/2011	06.11.2010	21:00:00.0000000	Sochaux	Auxerre	1	1	D
205	France	Ligue 1	2010/2011	06.11.2010	21:00:00.0000000	St Etienne	Lorient	1	2	A
206	France	Ligue 1	2010/2011	07.11.2010	21:00:00.0000000	Lens	Montpellier	2	0	H
207	France	Ligue 1	2010/2011	07.11.2010	21:00:00.0000000	Lille	Brest	3	1	H
208	France	Ligue 1	2010/2011	07.11.2010	21:00:00.0000000	Nancy	Monaco	0	4	A
209	France	Ligue 1	2010/2011	07.11.2010	21:00:00.0000000	Nice	Toulouse	2	0	H
210	France	Ligue 1	2010/2011	07.11.2010	21:00:00.0000000	Paris SG	Marseille	2	1	H
211	France	Ligue 1	2010/2011	13.11.2010	21:00:00.0000000	Bordeaux	Nancy	2	1	H
212	France	Ligue 1	2010/2011	13.11.2010	21:00:00.0000000	Brest	Sochaux	1	1	D
213	France	Ligue 1	2010/2011	13.11.2010	21:00:00.0000000	Caen	Lille	2	5	A
214	France	Ligue 1	2010/2011	13.11.2010	21:00:00.0000000	Marseille	Lens	1	1	D
215	France	Ligue 1	2010/2011	13.11.2010	21:00:00.0000000	Monaco	Arles	0	0	D
216	France	Ligue 1	2010/2011	13.11.2010	21:00:00.0000000	Montpellier	Toulouse	1	0	H
217	France	Ligue 1	2010/2011	14.11.2010	21:00:00.0000000	Auxerre	Rennes	2	1	H
218	France	Ligue 1	2010/2011	14.11.2010	21:00:00.0000000	Lorient	Paris SG	1	1	D
219	France	Ligue 1	2010/2011	14.11.2010	21:00:00.0000000	Lyon	Nice	1	0	H
220	France	Ligue 1	2010/2011	20.11.2010	21:00:00.0000000	Nancy	Valenciennes	2	0	H
221	France	Ligue 1	2010/2011	20.11.2010	21:00:00.0000000	Nice	Montpellier	0	1	A
222	France	Ligue 1	2010/2011	20.11.2010	21:00:00.0000000	Paris SG	Caen	2	1	H
223	France	Ligue 1	2010/2011	20.11.2010	21:00:00.0000000	Rennes	Brest	2	1	H
224	France	Ligue 1	2010/2011	20.11.2010	21:00:00.0000000	Sochaux	Lorient	2	0	H
225	France	Ligue 1	2010/2011	20.11.2010	21:00:00.0000000	St Etienne	Auxerre	1	1	D
226	France	Ligue 1	2010/2011	20.11.2010	21:00:00.0000000	Toulouse	Marseille	0	1	A
227	France	Ligue 1	2010/2011	21.11.2010	21:00:00.0000000	Arles	Bordeaux	2	4	A
228	France	Ligue 1	2010/2011	21.11.2010	21:00:00.0000000	Lens	Lyon	1	3	A
229	France	Ligue 1	2010/2011	21.11.2010	21:00:00.0000000	Lille	Monaco	2	1	H
230	France	Ligue 1	2010/2011	27.11.2010	21:00:00.0000000	Bordeaux	Lille	1	1	D
231	France	Ligue 1	2010/2011	27.11.2010	21:00:00.0000000	Lorient	Rennes	2	0	H
232	France	Ligue 1	2010/2011	27.11.2010	21:00:00.0000000	Marseille	Montpellier	4	0	H
233	France	Ligue 1	2010/2011	27.11.2010	21:00:00.0000000	Monaco	Nice	1	1	D
234	France	Ligue 1	2010/2011	27.11.2010	21:00:00.0000000	Nancy	St Etienne	1	1	D
235	France	Ligue 1	2010/2011	27.11.2010	21:00:00.0000000	Valenciennes	Arles	3	0	H
236	France	Ligue 1	2010/2011	28.11.2010	21:00:00.0000000	Auxerre	Toulouse	1	2	A
237	France	Ligue 1	2010/2011	28.11.2010	21:00:00.0000000	Caen	Sochaux	0	3	A
238	France	Ligue 1	2010/2011	28.11.2010	21:00:00.0000000	Lyon	Paris SG	2	2	D
239	France	Ligue 1	2010/2011	30.11.2010	21:00:00.0000000	Brest	Lens	4	1	H
240	France	Ligue 1	2010/2011	01.12.2010	21:00:00.0000000	Marseille	Rennes	0	0	D
241	France	Ligue 1	2010/2011	01.12.2010	21:00:00.0000000	Valenciennes	St Etienne	1	1	D
242	France	Ligue 1	2010/2011	04.12.2010	21:00:00.0000000	Arles	Nancy	1	1	D
243	France	Ligue 1	2010/2011	04.12.2010	21:00:00.0000000	Lens	Auxerre	1	1	D
244	France	Ligue 1	2010/2011	04.12.2010	21:00:00.0000000	Lille	Lorient	6	3	H
245	France	Ligue 1	2010/2011	04.12.2010	21:00:00.0000000	Montpellier	Lyon	1	2	A
246	France	Ligue 1	2010/2011	04.12.2010	21:00:00.0000000	Rennes	Monaco	1	0	H
247	France	Ligue 1	2010/2011	04.12.2010	21:00:00.0000000	Sochaux	Valenciennes	2	1	H
248	France	Ligue 1	2010/2011	04.12.2010	21:00:00.0000000	Toulouse	Caen	1	0	H
249	France	Ligue 1	2010/2011	05.12.2010	21:00:00.0000000	Nice	Marseille	1	0	H
250	France	Ligue 1	2010/2011	05.12.2010	21:00:00.0000000	Paris SG	Brest	3	1	H
251	France	Ligue 1	2010/2011	05.12.2010	21:00:00.0000000	St Etienne	Bordeaux	2	2	D
252	France	Ligue 1	2010/2011	11.12.2010	21:00:00.0000000	Arles	Lille	0	1	A
253	France	Ligue 1	2010/2011	11.12.2010	21:00:00.0000000	Auxerre	Marseille	1	1	D
254	France	Ligue 1	2010/2011	11.12.2010	21:00:00.0000000	Brest	Montpellier	0	0	D
255	France	Ligue 1	2010/2011	11.12.2010	21:00:00.0000000	Caen	Nice	0	0	D
256	France	Ligue 1	2010/2011	11.12.2010	21:00:00.0000000	Lorient	Lens	3	0	H
257	France	Ligue 1	2010/2011	11.12.2010	21:00:00.0000000	Nancy	Sochaux	1	0	H
258	France	Ligue 1	2010/2011	11.12.2010	21:00:00.0000000	Valenciennes	Paris SG	1	2	A
259	France	Ligue 1	2010/2011	12.12.2010	21:00:00.0000000	Bordeaux	Rennes	0	0	D
260	France	Ligue 1	2010/2011	12.12.2010	21:00:00.0000000	Lyon	Toulouse	2	0	H
261	France	Ligue 1	2010/2011	12.12.2010	21:00:00.0000000	Monaco	St Etienne	0	2	A
262	France	Ligue 1	2010/2011	18.12.2010	21:00:00.0000000	Montpellier	Auxerre	1	1	D
263	France	Ligue 1	2010/2011	18.12.2010	21:00:00.0000000	Nice	Brest	1	1	D
264	France	Ligue 1	2010/2011	18.12.2010	21:00:00.0000000	Paris SG	Monaco	2	2	D
265	France	Ligue 1	2010/2011	18.12.2010	21:00:00.0000000	Rennes	Valenciennes	1	0	H
266	France	Ligue 1	2010/2011	18.12.2010	21:00:00.0000000	St Etienne	Arles	2	0	H
267	France	Ligue 1	2010/2011	18.12.2010	21:00:00.0000000	Toulouse	Lorient	3	0	H
268	France	Ligue 1	2010/2011	19.12.2010	21:00:00.0000000	Marseille	Lyon	1	1	D
269	France	Ligue 1	2010/2011	19.12.2010	21:00:00.0000000	Sochaux	Bordeaux	1	1	D
270	France	Ligue 1	2010/2011	21.12.2010	21:00:00.0000000	Lorient	Montpellier	0	0	D
271	France	Ligue 1	2010/2011	22.12.2010	21:00:00.0000000	Arles	Nice	0	0	D
272	France	Ligue 1	2010/2011	22.12.2010	21:00:00.0000000	Bordeaux	Lens	2	2	D
273	France	Ligue 1	2010/2011	22.12.2010	21:00:00.0000000	Brest	Marseille	0	0	D
274	France	Ligue 1	2010/2011	22.12.2010	21:00:00.0000000	Caen	Rennes	1	0	H
275	France	Ligue 1	2010/2011	22.12.2010	21:00:00.0000000	Lille	St Etienne	1	1	D
276	France	Ligue 1	2010/2011	22.12.2010	21:00:00.0000000	Lyon	Auxerre	1	1	D
277	France	Ligue 1	2010/2011	22.12.2010	21:00:00.0000000	Monaco	Sochaux	2	1	H
278	France	Ligue 1	2010/2011	22.12.2010	21:00:00.0000000	Nancy	Paris SG	2	0	H
279	France	Ligue 1	2010/2011	22.12.2010	21:00:00.0000000	Valenciennes	Toulouse	2	1	H

1

dodaj naglówki kolumn, powiedz co jest nieprawidłowe dlaczego dane są złe,
dlaczego to ma być zwracane kilka razy zamiast raz, i gdzie ta druga pętla?

0

OK dane poniżej.
Querry jest złe ponieważ robię tabele raz w tygodniu a ja chciałbym żeby robiła ja co kolejkę np jak są mecze w tygodniu żeby również po tych meczach robiła tabele.
Ma być to zwracane kilka razy bo użytkownik deklarując @d będzie miał podgląd bieżącej na tamten okres tabeli.
Drugiej pętli na razie nie napisał bo nie wiem czy jest to najlepsze rozwiązanie. chciałem się doradzić tuta najpierw

id_week	nr_start	data_start	nr_end	data_end
536 40499   2010-11-17  40505   2010-11-23
537 40506   2010-11-24  40512   2010-11-30
538 40513   2010-12-01  40519   2010-12-07
539 40520   2010-12-08  40526   2010-12-14
540 40527   2010-12-15  40533   2010-12-21
541 40534   2010-12-22  40540   2010-12-28
542 40541   2010-12-29  40547   2011-01-04
543 40548   2011-01-05  40554   2011-01-11
544 40555   2011-01-12  40561   2011-01-18
545 40562   2011-01-19  40568   2011-01-25
546 40569   2011-01-26  40575   2011-02-01
547 40576   2011-02-02  40582   2011-02-08
548 40583   2011-02-09  40589   2011-02-15
549 40590   2011-02-16  40596   2011-02-22
550 40597   2011-02-23  40603   2011-03-01
551 40604   2011-03-02  40610   2011-03-08
552 40611   2011-03-09  40617   2011-03-15
553 40618   2011-03-16  40624   2011-03-22
554 40625   2011-03-23  40631   2011-03-29
555 40632   2011-03-30  40638   2011-04-05
556 40639   2011-04-06  40645   2011-04-12
557 40646   2011-04-13  40652   2011-04-19
558 40653   2011-04-20  40659   2011-04-26
559 40660   2011-04-27  40666   2011-05-03
560 40667   2011-05-04  40673   2011-05-10
561 40674   2011-05-11  40680   2011-05-17
562 40681   2011-05-18  40687   2011-05-24
563 40688   2011-05-25  40694   2011-05-31
564 40695   2011-06-01  40701   2011-06-07
ID	Country	League	Season	data	Time	Home	Away	HG	AG	Res
201 France  Ligue 1 2010/2011   06.11.2010  21:00:00.0000000    Arles   Caen    3   2   H
202 France  Ligue 1 2010/2011   06.11.2010  21:00:00.0000000    Bordeaux    Valenciennes    1   1   D
203 France  Ligue 1 2010/2011   06.11.2010  21:00:00.0000000    Rennes  Lyon    1   1   D
204 France  Ligue 1 2010/2011   06.11.2010  21:00:00.0000000    Sochaux Auxerre 1   1   D
205 France  Ligue 1 2010/2011   06.11.2010  21:00:00.0000000    St Etienne  Lorient 1   2   A
206 France  Ligue 1 2010/2011   07.11.2010  21:00:00.0000000    Lens    Montpellier 2   0   H
207 France  Ligue 1 2010/2011   07.11.2010  21:00:00.0000000    Lille   Brest   3   1   H
208 France  Ligue 1 2010/2011   07.11.2010  21:00:00.0000000    Nancy   Monaco  0   4   A
209 France  Ligue 1 2010/2011   07.11.2010  21:00:00.0000000    Nice    Toulouse    2   0   H
210 France  Ligue 1 2010/2011   07.11.2010  21:00:00.0000000    Paris SG    Marseille   2   1   H
211 France  Ligue 1 2010/2011   13.11.2010  21:00:00.0000000    Bordeaux    Nancy   2   1   H
212 France  Ligue 1 2010/2011   13.11.2010  21:00:00.0000000    Brest   Sochaux 1   1   D
213 France  Ligue 1 2010/2011   13.11.2010  21:00:00.0000000    Caen    Lille   2   5   A
214 France  Ligue 1 2010/2011   13.11.2010  21:00:00.0000000    Marseille   Lens    1   1   D
215 France  Ligue 1 2010/2011   13.11.2010  21:00:00.0000000    Monaco  Arles   0   0   D
216 France  Ligue 1 2010/2011   13.11.2010  21:00:00.0000000    Montpellier Toulouse    1   0   H
217 France  Ligue 1 2010/2011   14.11.2010  21:00:00.0000000    Auxerre Rennes  2   1   H
218 France  Ligue 1 2010/2011   14.11.2010  21:00:00.0000000    Lorient Paris SG    1   1   D
219 France  Ligue 1 2010/2011   14.11.2010  21:00:00.0000000    Lyon    Nice    1   0   H
220 France  Ligue 1 2010/2011   20.11.2010  21:00:00.0000000    Nancy   Valenciennes    2   0   H
221 France  Ligue 1 2010/2011   20.11.2010  21:00:00.0000000    Nice    Montpellier 0   1   A
222 France  Ligue 1 2010/2011   20.11.2010  21:00:00.0000000    Paris SG    Caen    2   1   H
223 France  Ligue 1 2010/2011   20.11.2010  21:00:00.0000000    Rennes  Brest   2   1   H
224 France  Ligue 1 2010/2011   20.11.2010  21:00:00.0000000    Sochaux Lorient 2   0   H
225 France  Ligue 1 2010/2011   20.11.2010  21:00:00.0000000    St Etienne  Auxerre 1   1   D
226 France  Ligue 1 2010/2011   20.11.2010  21:00:00.0000000    Toulouse    Marseille   0   1   A
227 France  Ligue 1 2010/2011   21.11.2010  21:00:00.0000000    Arles   Bordeaux    2   4   A
228 France  Ligue 1 2010/2011   21.11.2010  21:00:00.0000000    Lens    Lyon    1   3   A
229 France  Ligue 1 2010/2011   21.11.2010  21:00:00.0000000    Lille   Monaco  2   1   H
230 France  Ligue 1 2010/2011   27.11.2010  21:00:00.0000000    Bordeaux    Lille   1   1   D
231 France  Ligue 1 2010/2011   27.11.2010  21:00:00.0000000    Lorient Rennes  2   0   H
232 France  Ligue 1 2010/2011   27.11.2010  21:00:00.0000000    Marseille   Montpellier 4   0   H
233 France  Ligue 1 2010/2011   27.11.2010  21:00:00.0000000    Monaco  Nice    1   1   D
234 France  Ligue 1 2010/2011   27.11.2010  21:00:00.0000000    Nancy   St Etienne  1   1   D
235 France  Ligue 1 2010/2011   27.11.2010  21:00:00.0000000    Valenciennes    Arles   3   0   H
236 France  Ligue 1 2010/2011   28.11.2010  21:00:00.0000000    Auxerre Toulouse    1   2   A
237 France  Ligue 1 2010/2011   28.11.2010  21:00:00.0000000    Caen    Sochaux 0   3   A
238 France  Ligue 1 2010/2011   28.11.2010  21:00:00.0000000    Lyon    Paris SG    2   2   D
239 France  Ligue 1 2010/2011   30.11.2010  21:00:00.0000000    Brest   Lens    4   1   H
240 France  Ligue 1 2010/2011   01.12.2010  21:00:00.0000000    Marseille   Rennes  0   0   D
241 France  Ligue 1 2010/2011   01.12.2010  21:00:00.0000000    Valenciennes    St Etienne  1   1   D
242 France  Ligue 1 2010/2011   04.12.2010  21:00:00.0000000    Arles   Nancy   1   1   D
243 France  Ligue 1 2010/2011   04.12.2010  21:00:00.0000000    Lens    Auxerre 1   1   D
244 France  Ligue 1 2010/2011   04.12.2010  21:00:00.0000000    Lille   Lorient 6   3   H
245 France  Ligue 1 2010/2011   04.12.2010  21:00:00.0000000    Montpellier Lyon    1   2   A
246 France  Ligue 1 2010/2011   04.12.2010  21:00:00.0000000    Rennes  Monaco  1   0   H
247 France  Ligue 1 2010/2011   04.12.2010  21:00:00.0000000    Sochaux Valenciennes    2   1   H
248 France  Ligue 1 2010/2011   04.12.2010  21:00:00.0000000    Toulouse    Caen    1   0   H
249 France  Ligue 1 2010/2011   05.12.2010  21:00:00.0000000    Nice    Marseille   1   0   H
250 France  Ligue 1 2010/2011   05.12.2010  21:00:00.0000000    Paris SG    Brest   3   1   H
251 France  Ligue 1 2010/2011   05.12.2010  21:00:00.0000000    St Etienne  Bordeaux    2   2   D
252 France  Ligue 1 2010/2011   11.12.2010  21:00:00.0000000    Arles   Lille   0   1   A
253 France  Ligue 1 2010/2011   11.12.2010  21:00:00.0000000    Auxerre Marseille   1   1   D
254 France  Ligue 1 2010/2011   11.12.2010  21:00:00.0000000    Brest   Montpellier 0   0   D
255 France  Ligue 1 2010/2011   11.12.2010  21:00:00.0000000    Caen    Nice    0   0   D
256 France  Ligue 1 2010/2011   11.12.2010  21:00:00.0000000    Lorient Lens    3   0   H
257 France  Ligue 1 2010/2011   11.12.2010  21:00:00.0000000    Nancy   Sochaux 1   0   H
258 France  Ligue 1 2010/2011   11.12.2010  21:00:00.0000000    Valenciennes    Paris SG    1   2   A
259 France  Ligue 1 2010/2011   12.12.2010  21:00:00.0000000    Bordeaux    Rennes  0   0   D
260 France  Ligue 1 2010/2011   12.12.2010  21:00:00.0000000    Lyon    Toulouse    2   0   H
261 France  Ligue 1 2010/2011   12.12.2010  21:00:00.0000000    Monaco  St Etienne  0   2   A
262 France  Ligue 1 2010/2011   18.12.2010  21:00:00.0000000    Montpellier Auxerre 1   1   D
263 France  Ligue 1 2010/2011   18.12.2010  21:00:00.0000000    Nice    Brest   1   1   D
264 France  Ligue 1 2010/2011   18.12.2010  21:00:00.0000000    Paris SG    Monaco  2   2   D
265 France  Ligue 1 2010/2011   18.12.2010  21:00:00.0000000    Rennes  Valenciennes    1   0   H
266 France  Ligue 1 2010/2011   18.12.2010  21:00:00.0000000    St Etienne  Arles   2   0   H
267 France  Ligue 1 2010/2011   18.12.2010  21:00:00.0000000    Toulouse    Lorient 3   0   H
268 France  Ligue 1 2010/2011   19.12.2010  21:00:00.0000000    Marseille   Lyon    1   1   D
269 France  Ligue 1 2010/2011   19.12.2010  21:00:00.0000000    Sochaux Bordeaux    1   1   D
270 France  Ligue 1 2010/2011   21.12.2010  21:00:00.0000000    Lorient Montpellier 0   0   D
271 France  Ligue 1 2010/2011   22.12.2010  21:00:00.0000000    Arles   Nice    0   0   D
272 France  Ligue 1 2010/2011   22.12.2010  21:00:00.0000000    Bordeaux    Lens    2   2   D
273 France  Ligue 1 2010/2011   22.12.2010  21:00:00.0000000    Brest   Marseille   0   0   D
274 France  Ligue 1 2010/2011   22.12.2010  21:00:00.0000000    Caen    Rennes  1   0   H
275 France  Ligue 1 2010/2011   22.12.2010  21:00:00.0000000    Lille   St Etienne  1   1   D
276 France  Ligue 1 2010/2011   22.12.2010  21:00:00.0000000    Lyon    Auxerre 1   1   D
277 France  Ligue 1 2010/2011   22.12.2010  21:00:00.0000000    Monaco  Sochaux 2   1   H
278 France  Ligue 1 2010/2011   22.12.2010  21:00:00.0000000    Nancy   Paris SG    2   0   H
279 France  Ligue 1 2010/2011   22.12.2010  21:00:00.0000000    Valenciennes    Toulouse    2   1   H
0

Ciągle nie odpowiedziałeś na pytanie: to ma być zwracane jako kilka rezultatów?

0
Panczo napisał(a):

Ciągle nie odpowiedziałeś na pytanie: to ma być zwracane jako kilka rezultatów?

zasadniczo Tak

ewentualnie wrzucę sobie całość do tabelki tymczasowej i to będę wyświetlał.

0

musisz zrezygnować z id tygodnia tylko pobierać tabelę na odpowiednią datę, napisałbym funkcje pomocniczą:

CREATE FUNCTION dbo.tabelawynikow(@d datetime)
RETURNS TABLE
AS
return 

select 
    ROW_NUMBER() OVER( ORDER BY (sum(case when hg > ag then 3 else 0 end + case when hg = ag then 1 else 0 end )) desc,(sum(hg) - sum(ag))desc, (sum(hg)) desc ) AS Pozycja ,
    team, 
    sum(case when hg is null then 0 else 1 end ) MP, 
    count(case when hg > ag then 1 end) W, 
    count(case when hg = ag then 1 end) D, 
    count(case when hg < ag then 1 end) L,
    sum(hg) GF,
    sum(ag) GA,
    sum(hg) - sum(ag) GD,
    sum(case when hg > ag then 3 else 0 end + case when hg = ag then 1 else 0 end) Pts
from 
    (
	 SELECT country, 
		   Season, 
		   data, 
		   home team, 
		   hg, 
		   ag
	FROM MECZE m
	WHERE time <= @d
	UNION
	SELECT country, 
		   Season, 
		   data, 
		   away team, 
		   ag, 
		   hg
	FROM MECZE
	WHERE time <= @d) as dt
group by     country    ,team 

i pobrał daty dla których je wyświetlać:

declare @dtstart as datetime
declare @dtend as datetime

select @dtstart= min (data_start),@dtend=max(data_end) from tygodnie where id_week between @d and @d2

--to zapytanie zwraca daty na które musisz puścić funkcje tabelawynikow
select distinct data from mecze where data between @dtstart and @dtend order by 1

Nie napisze Ci kursora bo uważam że to powinna już przejać aplikacja, a nie być procesowane po stronie bazy, jak sie uprzesz to poczytaj

to podejście zadziała nawet jak mecze będą codziennie

0

Dzięki za zainteresowanie
Pancho w swojej funkcji time zmieniłem na data bo pewnie o tym myślałeś ale sprawdzam to rozwiązanie i nie o to mi chodziło

Przykładowo ktoś będzie chciał zobaczyć tabele dla konkretnej drużyny dla poszczególnych kolejek
(nazwę drużyny deklaruje w innym zapytaniu select)
Chodzi o to żeby querry nie robiło dla każdej daty z tej tabeli tylko żeby była pętla i robiło dokładnie dla tej drużyny przed czy po jej meczu.

Przykładowo wpisze 'Paris SG' i chce aby pokazało tabele dla psg przed kazdym jej meczem
Da sie tak zrobić bez tego kursora ?

0

To trochę nielogiczne, albo ja nie rozumiem...
Skoro tabela ma być przed meczem, to nieścisłości jakie się nasuwają:

  1. Czemu mam zwracać kilka tabel
  2. Nie ma problemu z dwoma kolejkami w tygodniu bo biorę wszystkie mecze przed

Nie da się zwrócić kliku rezultatów w jednym zapytaniu...

Mam problem ze zrozumieniem Twojego problemu, na oko nie możesz polegać na id tygodnia bo to nie jest wyznacznik kolejki, z drugiej zaś strony wystarczy wziąć datę mniejszą, a nie mniejszą lub równą i będziesz musiał dane przed meczem, tylko to zaś się kłóci z Twoim 1 postem bo idweek nie determinuje kiedy mecz się odbył

0

ok to zapomnijmy o tabeli tygodnie. i trochę inaczej skonstruuje pytanie

Chciałbym aby podając nazwę drużyny , sezon , kraj

pokazały się wszystkie tabele dla tej drużyny z całego sezonu ( dla mojej konkretnej drużyny - dokładnie jeden wiersz z poyzjia ptk ilością strzelonych goli itd)

Jak powiązać daty aby to było możliwe w pętli ?

0

zakladam że dane dostajesz przefiltrowane (cte dane) w jednym zapytaniu, mecz który sie odbędzie i punkty PRZED meczem:

Declare @d as varchar(20)
set @d = 'paris sg';
with dane as (
  select         country        ,Season        ,data        ,home team        ,hg        ,ag ,home + ' vs. ' + away rywale
    from 
        MECZE
        where home=@d
    union 
    select         country        ,Season        ,data        ,away team        ,ag        ,hg, away + ' vs. ' + home rywale
        from
        MECZE 
        where away=@d 
) 
, mecze as (
   select
       team
       , data
	   ,rywale
       , row_number() over (order by data desc) mecz
   from
       dane

)
, tabele as (
select 
mecz,d.country,d.Season,d.data,d.team,d.hg,d.ag, m.rywale
from mecze m
left join dane d on m.data < d.data)

select 
     mecz ,
    team, 
    sum(case when hg is null then 0 else 1 end ) MP, 
    count(case when hg > ag then 1 end) W, 
    count(case when hg = ag then 1 end) D, 
    count(case when hg < ag then 1 end) L,
    sum(hg) GF,
    sum(ag) GA,
    sum(hg) - sum(ag) GD,
    sum(case when hg > ag then 3 else 0 end + case when hg = ag then 1 else 0 end) Pts,
	rywale
from 
    tabele

group by    mecz,  country    ,team , rywale

Kolumna mecz identyfikuje numer meczu, kolumna rywale (dla mnie aby lepiej interpretować dane), jeżeli chcesz to w osobnych "tabelach" to kursor.

https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=f7d21902a9ce482938e9d2a4ec3418d3

0

Tak leci to z innego cte które daje mi te dane.

wyświetlanie które zaproponowałeś jest ok ale nie do końca to działa

zrób sobie select * from tabele w tym co napisałeś zobaczysz ze sa duplikaty na rywalach
jest gdzieś logiczny błąd ale nie mogę go zlokalizować

https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=b926b3716d86c0571a648deab9ae0eae

0

To nie jest błąd logiczny, tylko logiczne działanie...

Zwróć uwagę na warunek sprzężenia tam nie ma równości, do każdego meczu biorę dane wszystkich meczów poprzedzających, dlatego wynik agreguje licząc punkty

0

Ok to rozumiem ale zwroc uwage na załącznik

Paris SG powinno miec 3 remisy na poczatku a ma 3 wygrane
Trzeba usunac desc z daty wtedy liczy porawniej ale tez to nie sa wyniki odpowiadajace tabeli

O to mi chodzilo

2

Faktycznie, tak to jest jak sie pisze w tych webowych klientach, dwa moje bledy to w cte mecze niepotrzebnie ustawiłem desc przy row_number, co skutkowało tym że źle ustawiłem nierówność w sprzężeniu, powinno być tak:

Declare @d as varchar(20)
set @d = 'paris sg';
with dane as (
  select         country        ,Season        ,data        ,home team        ,hg        ,ag ,home + ' vs. ' + away rywale
    from 
        MECZE
        where home=@d
    union 
    select         country        ,Season        ,data        ,away team        ,ag        ,hg, away + ' vs. ' + home rywale
        from
        MECZE 
        where away=@d 
) 
, mecze as (
   select
       team
       , data
	   ,rywale
       , row_number() over (order by data) mecz
   from
       dane

)
, tabele as (
select 
mecz,country,d.Season,d.data,d.team,d.hg,d.ag, m.rywale, m.data datam
from mecze m
left join dane d on m.data > d.data)


select 
     mecz ,
    team, 
    sum(case when hg is null then 0 else 1 end ) MP, 
    sum(case when hg > ag then 1 else 0 end) W, 
    sum(case when hg = ag then 1 else 0 end) D, 
    sum(case when hg < ag then 1 else 0 end) L,
    sum(hg) GF,
    sum(ag) GA,
    sum(hg) - sum(ag) GD,
    sum(case when hg > ag then 3 else 0 end + case when hg = ag then 1 else 0 end) Pts,
	rywale
from 
    tabele

group by    mecz,  country    ,team , rywale
0

Super o to chodziło. nie wpadłem na to porowanie a wydaje sie teraz takie proste.

Wielkie dzieki Pancho

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