Procedura z union all

0

Witam,

mam procedurę, która wygląda tak:

USE [MAS_TEST]
GO
/****** Object: StoredProcedure [dbo].[lbu_faktoring] Script Date: 03/25/2016 0934 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[lbu_faktoring] @dataod date, @datado date

 AS

BEGIN
select rtrim(o.odbiorca_idn) as Nazwa,
n.dok_idm as [Numer faktury],
convert(date,n.datoper,120)as [Data wystawienia],
convert(date,n.datzap,120) as [Termin płatności],
n.kwota as [Wartość faktury],
replace(k.nip,'-','') as [Identyfikator podatnika]
--SUM(n.kwota)

from fk_naleznosc n
join fk_stronarozrach s on s.stronarozrach_id = n.stronarozrach_id
join kontrahent k on k.identyfikator_num = s.identyfikator_num
join fk_konto ko on ko.konto_id = n.konto_id
join odbiorca o on o.kontrahent_id = k.kontrahent_id
join cechodb co on co.odbiorca_id = o.odbiorca_id


where co.wartoscparametru = 'MILLENNIUM FAKTORING' and n.waluta_id = 1  and (LEFT(ko.konto_idm, 6) IN ('200-01')) and k.nip is not null and n.datzap between @dataod and @datado

group by o.odbiorca_idn, n.dok_idm,n.kwota,n.datoper,n.datzap,k.nip


union all


select  rtrim(d.dostawca_idn) as Nazwa,
	z.dok_idm as [Numer faktury],
	convert(date,z.datoper,120)as [Data wystawienia],
	convert(date,z.datzap,120) as [Termin płatności],
	z.kwota as [Wartość faktury],
	replace(k.nip,'-','') as [Identyfikator podatnika]
	--SUM(z.kwota)
	
	
from fk_zobowiazanie z
join fk_stronarozrach s on s.stronarozrach_id = z.stronarozrach_id
join kontrahent k on k.identyfikator_num = s.identyfikator_num
join fk_konto ko on ko.konto_id = z.konto_id
join dostawca d on d.kontrahent_id = k.kontrahent_id
join cechydst cd on cd.dostawca_id = d.dostawca_id


where cd.wartoscparametru = 'MILLENNIUM FAKTORING' and z.waluta_id = 1  and (LEFT(ko.konto_idm, 6) IN ('200-10','201-10'))  and k.nip is not null and z.datzap between @dataod and @datado

group by d.dostawca_idn, z.dok_idm,z.kwota,z.datoper,z.datzap,k.nip

order by Nazwa

	
END

Problem pojawia się przy wywołaniu procedury z parametrami.
Mianowicie dane z pierwszego select'a są pobierane z bazy natomiast dane z drugiego select'a już nie.
Gdzie mam błąd, który powoduje takie zachowanie?

0

A wykonywałeś drugi select samodzielnie z parametrami tej procedury czy na pewno coś zwraca?

0

Tak. Sprawdziłem osobno i działa.
Działa również jak obydwa select'y zapuszczę razem czyli:

declare
@dataod as date,
@datado as date

select
@dataod = '2016-04-25',
@datado = '2016-07-01'

select
rtrim(o.odbiorca_idn) as Nazwa,
n.dok_idm as [Numer faktury],
convert(date,n.datoper,120)as [Data wystawienia],
convert(date,n.datzap,120) as [Termin płatności],
n.kwota as [Wartość faktury],
replace(k.nip,'-','') as [Identyfikator podatnika],
SUM(n.kwota)

from fk_naleznosc n
join fk_stronarozrach s on s.stronarozrach_id = n.stronarozrach_id
join kontrahent k on k.identyfikator_num = s.identyfikator_num
join fk_konto ko on ko.konto_id = n.konto_id
join odbiorca o on o.kontrahent_id = k.kontrahent_id
join cechodb co on co.odbiorca_id = o.odbiorca_id


where co.wartoscparametru = 'MILLENNIUM FAKTORING' and n.waluta_id = 1  and (LEFT(ko.konto_idm, 6) IN ('200-01')) and k.nip is not null and n.datzap between @dataod and @datado

group by o.odbiorca_idn, n.dok_idm,n.kwota,n.datoper,n.datzap,k.nip


union all

select  rtrim(d.dostawca_idn) as Nazwa,
	z.dok_idm as [Numer faktury],
	convert(date,z.datoper,120)as [Data wystawienia],
	convert(date,z.datzap,120) as [Termin płatności],
	z.kwota as [Wartość faktury],
	replace(k.nip,'-','') as [Identyfikator podatnika],
	SUM(z.kwota)
	
	
from fk_zobowiazanie z
join fk_stronarozrach s on s.stronarozrach_id = z.stronarozrach_id
join kontrahent k on k.identyfikator_num = s.identyfikator_num
join fk_konto ko on ko.konto_id = z.konto_id
join dostawca d on d.kontrahent_id = k.kontrahent_id
join cechydst cd on cd.dostawca_id = d.dostawca_id


where cd.wartoscparametru = 'MILLENNIUM FAKTORING' and z.waluta_id = 1  and (LEFT(ko.konto_idm, 6) IN ('200-10','201-10'))  and k.nip is not null and z.datzap between @dataod  and @datado

group by d.dostawca_idn, z.dok_idm,z.kwota,z.datoper,z.datzap,k.nip

order by Nazwa
1

_

1. SFORMATUJ TEN KOD I WEŹ GO

W ODPOWIEDNIE ZNACZNIKI</span> bo tego to się czytać nie da
2. spróbuj tak

SELECT * FROM (tutaj_twoje_brzydkie_zapytanie_bez_order_by) as x order by nazwa
0

Proszę nie krzyczeć wystarczy napisać normalnie. Następnym razem się poprawię. Nie bardzo rozumiem dlaczego mam zrobić podzapytanie jeżeli select'y działają prawidłowo natomiast procedura nie wyrzuca danych z drugiego select'a. Więc wydaje mi się, że mam błąd w procedurze a nie selec'cie.

0
buchu2 napisał(a):

Proszę nie krzyczeć wystarczy napisać normalnie.

było napisane normalnie pod pierwszym Twoim postem. Następnie to samo wkleiłeś w drugi swój post więc widać nie wystarczy

Nie bardzo rozumiem dlaczego mam zrobić podzapytanie

tym bardziej nie wiesz czemu nie działa więc wypadało by spróbować. Mam podejrzenie dlaczego to może tak działać ale nie mam gdzie sprawdzić więc 30 sekund zaangażowania z Twojej strony nie spowoduje, że korona z głowy Ci spadnie a będzie wiadomo czy pomogło czy nie

0

Być może Pan jest omnibusem i pojmuje wszytko w lot, więc gratuluję. Mi czasami trzeba powtórzyć dwa razy nie koniecznie krzycząc. Jak ma Pan podejrzenia to może lepiej od razu napisać i pomóc niż się chwalić. Denerwuje się Pan tylko nie wiem po co ta agresja.

0

Panowie spokojnie.
Spróbuj odpalić procedurę w trybie DEBUG i zobacz jakie wartości mają zmienne, jak się zachowuje skrypt. Jest jakaś głupota bo nie możliwe, że procedura nie zwraca danych z SELECT.

0
buchu2 napisał(a):

Proszę nie krzyczeć wystarczy napisać normalnie. Następnym razem się poprawię. Nie bardzo rozumiem dlaczego mam zrobić podzapytanie jeżeli select'y działają prawidłowo natomiast procedura nie wyrzuca danych z drugiego select'a. Więc wydaje mi się, że mam błąd w procedurze a nie selec'cie.

Mam dzisiaj dobry dzień. więc napiszę tylko że krytyke warto czasem zacząć od siebie nie prościej zaserwować coś takiego:

USE [MAS_TEST]
GO
/**** Object:  StoredProcedure [dbo].[lbu_faktoring]    Script Date: 03/25/2016 09:16:34 ****/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[lbu_faktoring] @dataod date, @datado date
AS
BEGIN
  SELECT
    RTRIM(o.odbiorca_idn) AS Nazwa,
    n.dok_idm AS [Numer faktury],
    CONVERT(date, n.datoper, 120) AS [Data wystawienia],
    CONVERT(date, n.datzap, 120) AS [Termin płatności],
    n.kwota AS [Wartość faktury],
    REPLACE (k.nip, '-',) AS [Identyfikator podatnika]
  --SUM(n.kwota)
  FROM
    fk_naleznosc n
    JOIN fk_stronarozrach s ON s.stronarozrach_id = n.stronarozrach_id
    JOIN kontrahent k ON k.identyfikator_num = s.identyfikator_num
    JOIN fk_konto ko ON ko.konto_id = n.konto_id
    JOIN odbiorca o ON o.kontrahent_id = k.kontrahent_id
    JOIN cechodb co ON co.odbiorca_id = o.odbiorca_id
  WHERE
    co.wartoscparametru = 'MILLENNIUM FAKTORING'
    AND n.waluta_id = 1
    AND (LEFT(ko.konto_idm, 6) IN ('200-01'))
    AND k.nip IS NOT NULL
    AND n.datzap BETWEEN @dataod AND @datado
  GROUP BY
    o.odbiorca_idn,
    n.dok_idm,
    n.kwota,
    n.datoper,
    n.datzap,
    k.nip
  UNION ALL
  SELECT
    RTRIM(d.dostawca_idn) AS Nazwa,
    z.dok_idm AS [Numer faktury],
    CONVERT(date, z.datoper, 120) AS [Data wystawienia],
    CONVERT(date, z.datzap, 120) AS [Termin płatności],
    z.kwota AS [Wartość faktury],
    REPLACE (k.nip, '-',) AS [Identyfikator podatnika]
  --SUM(z.kwota)
  FROM
    fk_zobowiazanie z
    JOIN fk_stronarozrach s ON s.stronarozrach_id = z.stronarozrach_id
    JOIN kontrahent k ON k.identyfikator_num = s.identyfikator_num
    JOIN fk_konto ko ON ko.konto_id = z.konto_id
    JOIN dostawca d ON d.kontrahent_id = k.kontrahent_id
    JOIN cechydst cd ON cd.dostawca_id = d.dostawca_id
  WHERE
    cd.wartoscparametru = 'MILLENNIUM FAKTORING'
    AND z.waluta_id = 1
    AND (LEFT(ko.konto_idm, 6) IN ('200-10', '201-10'))
    AND k.nip IS NOT NULL
    AND z.datzap BETWEEN @dataod AND @datado
  GROUP BY
    d.dostawca_idn,
    z.dok_idm,
    z.kwota,
    z.datoper,
    z.datzap,
    k.nip
  ORDER BY Nazwa
END

To daje więcej swobody odpowiadającym i o to własnie zwrócił się do ciebie @abrakadaber, a w komentarzu wspomnial o tym @woolfik

Zmień kod na taki i zobacz czy faktycznie nic nie zwraca:

USE [MAS_TEST]
GO
/**** Object:  StoredProcedure [dbo].[lbu_faktoring]    Script Date: 03/25/2016 09:16:34 ****/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[lbu_faktoring] @dataod date, @datado date
AS
BEGIN
/*  SELECT
    RTRIM(o.odbiorca_idn) AS Nazwa,
    n.dok_idm AS [Numer faktury],
    CONVERT(date, n.datoper, 120) AS [Data wystawienia],
    CONVERT(date, n.datzap, 120) AS [Termin płatności],
    n.kwota AS [Wartość faktury],
    REPLACE (k.nip, '-',) AS [Identyfikator podatnika]
  --SUM(n.kwota)
  FROM
    fk_naleznosc n
    JOIN fk_stronarozrach s ON s.stronarozrach_id = n.stronarozrach_id
    JOIN kontrahent k ON k.identyfikator_num = s.identyfikator_num
    JOIN fk_konto ko ON ko.konto_id = n.konto_id
    JOIN odbiorca o ON o.kontrahent_id = k.kontrahent_id
    JOIN cechodb co ON co.odbiorca_id = o.odbiorca_id
  WHERE
    co.wartoscparametru = 'MILLENNIUM FAKTORING'
    AND n.waluta_id = 1
    AND (LEFT(ko.konto_idm, 6) IN ('200-01'))
    AND k.nip IS NOT NULL
    AND n.datzap BETWEEN @dataod AND @datado
  GROUP BY
    o.odbiorca_idn,
    n.dok_idm,
    n.kwota,
    n.datoper,
    n.datzap,
    k.nip
  UNION ALL*/
  SELECT
    RTRIM(d.dostawca_idn) AS Nazwa,
    z.dok_idm AS [Numer faktury],
    CONVERT(date, z.datoper, 120) AS [Data wystawienia],
    CONVERT(date, z.datzap, 120) AS [Termin płatności],
    z.kwota AS [Wartość faktury],
    REPLACE (k.nip, '-',) AS [Identyfikator podatnika]
  --SUM(z.kwota)
  FROM
    fk_zobowiazanie z
    JOIN fk_stronarozrach s ON s.stronarozrach_id = z.stronarozrach_id
    JOIN kontrahent k ON k.identyfikator_num = s.identyfikator_num
    JOIN fk_konto ko ON ko.konto_id = z.konto_id
    JOIN dostawca d ON d.kontrahent_id = k.kontrahent_id
    JOIN cechydst cd ON cd.dostawca_id = d.dostawca_id
  WHERE
    cd.wartoscparametru = 'MILLENNIUM FAKTORING'
    AND z.waluta_id = 1
    AND (LEFT(ko.konto_idm, 6) IN ('200-10', '201-10'))
    AND k.nip IS NOT NULL
    AND z.datzap BETWEEN @dataod AND @datado
  GROUP BY
    d.dostawca_idn,
    z.dok_idm,
    z.kwota,
    z.datoper,
    z.datzap,
    k.nip
  ORDER BY Nazwa
END
0

Witam,

Panie Panczo dziękuję za spokojne wyjaśnienie tematu. Czyli można. Super, że są tacy ludzie. Sprawdzę i dam znać co i jak.

Dziękuję za pomoc i spojrzenie na temat z innej strony. Błąd po mojej stronie do czego się przyznaję. Wczoraj byłem chyba nieźle zamotany.
Procedurę odpalałem na bazie testowej a select'y na głównej. No i najzwyczajniej w świecie na testówce nie było wszystkich danych.

0

A no właśnie, napisałem że to jakaś głupota i nie możliwe, że procedura nie zwraca danych.
Odpowiadając na komentarz nie chodzi o to, że procedura nie może zwrócić danych w sytuacji gdy select nic nie zwraca, ale pytający napisał, że same selecty zwracają dane i w takim kontekście napisałem, że to nie możliwe :)

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