Damian Kienczkowski Student, WSTI
Temat: Dzielenie dwóch SELECT-ów ?
Witam !Mam taki o to problem, za pomocą dwóch SELECT-ów wyciągam dane liczbowe z tabel a następnie dziele je przez siebie, jednak wynik jest nie poprawny, zawsze NULL. O to SELECT-y, działają poprawnie:
1. SELECT COUNT(*) FROM Contractors c; -- = 3846
2. SELECT COUNT(cc.Id) FROM Contractors c, ContractorContacts cc WHERE
c.ID = cc.ContractorId;-- = 1535
-----------O to moje zapytanie-----------
(SELECT
(SELECT COUNT(*) FROM Contractors c, ContractorContacts cc WHERE c.ID = cc.ContractorId) / (SELECT COUNT(*) FROM Contractors c ));
Pracuje na MS SQL Server 2008David Gałan edytował(a) ten post dnia 03.11.11 o godzinie 12:34
Szymon
P.
Trzymać życia
rytm, a nie szarpać
się z nim
Temat: Dzielenie dwóch SELECT-ów ?
declare @zmiennaPierwsza decimal(18,9), @zmiennaDruga decimal(18,9), @wynik decimal(18,9)
SET @zmiennaPierwsza = (SELECT COUNT(*) FROM Contractors c)
SET @zmiennaDruga = (SELECT COUNT(cc.Id) FROM Contractors c join ContractorContacts cc ON
c.ID = cc.ContractorId)
set @wynik = (@zmiennaDruga / @zmiennaPierwsza)
select @wynik
Chodzilo ci o cos takiego ?Szymon P. edytował(a) ten post dnia 03.11.11 o godzinie 23:41
Damian Kienczkowski Student, WSTI
Temat: Dzielenie dwóch SELECT-ów ?
Dziękuję Ci bardzo, dokładnie o to mi chodziło. Tylko proszę powiedz mi jeszcze dlaczego to moje zapytanie nie chciało działać ?Pozdrawiam
Szymon
P.
Trzymać życia
rytm, a nie szarpać
się z nim
Temat: Dzielenie dwóch SELECT-ów ?
Zadanie domowe ;)
Maciek
Kański
Programista C#
ASP.NET
Temat: Dzielenie dwóch SELECT-ów ?
David Gałan:Naprawdę NULL ? To ja poproszę o wyjaśnienie skąd ten NULL - ja tego NULLa na moim SQL 2008 (compatibilityLevel=100) nie mogę odtworzyć.
jednak wynik jest nie poprawny, zawsze NULL
Co innego ZERO - niech to pozostanie zadaniem dowomowym - ale NULL???
Jacek
Szajer
Współwłaściciel,
Business
Intelligence
Technologies SC
Temat: Dzielenie dwóch SELECT-ów ?
Dokładnie ta sama wątpliwość co przedmówca - czy aby na pewno NULL?a jako podpowiedź do zadania domowego - zobacz jaki wynik da:
(SELECT
1.0*(SELECT COUNT(*) FROM Contractors c, ContractorContacts cc WHERE c.ID = cc.ContractorId) / (SELECT COUNT(*) FROM Contractors c ));
Przemysław R. pracownik
Temat: Dzielenie dwóch SELECT-ów ?
;WITH zap1 as (
SELECT COUNT(*) * 1.0 as ile_all
FROM Contractors c
), zap2 as (
SELECT COUNT(cc.Id) * 1.0 as ile_id
FROM Contractors c join ContractorContacts cc ON c.ID = cc.ContractorId
)
select case when zap1.ile_all = then Null else zap2.ile_id / zap1.ile_all end as wynik
Damian Kienczkowski Student, WSTI
Temat: Dzielenie dwóch SELECT-ów ?
Koledzy mój błąd, źle odczytałem wartość z tabeli wynikowej, faktycznie było 0. Dziękuję wszystkim za pomoc, zdecydowanie poszerzyliście mój kont patrzenia na zapytania, rozwiązanie było naprawdę proste, ja niestety nie potrafiłem tego zrobić. Finalnie wybrałem rozwiązanie Szymona, wydało mi się najbardziej czytelne. Oczywiście wszystkie rozwiązania są jak najbardziej okej :).PozdrawiamDavid Gałan edytował(a) ten post dnia 04.11.11 o godzinie 12:20
