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.

Szymon P. Databricks, Azure
Data Factory, MS SQL
SERVER

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

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.

Szymon P. Databricks, Azure
Data Factory, MS SQL
SERVER

Temat: Dzielenie dwóch SELECT-ów ?

Zadanie domowe ;)

konto usunięte

Temat: Dzielenie dwóch SELECT-ów ?

David Gałan:
jednak wynik jest nie poprawny, zawsze NULL
Naprawdę NULL ? To ja poproszę o wyjaśnienie skąd ten NULL - ja tego NULLa na moim SQL 2008 (compatibilityLevel=100) nie mogę odtworzyć.

Co innego ZERO - niech to pozostanie zadaniem dowomowym - ale NULL???
Jacek Szajer

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 ));

konto usunięte

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

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

Następna dyskusja:

Problem z zapytaniem select




Wyślij zaproszenie do