Po pierwsze, czy mogę stwierdzić, że jestem świadomy możliwości np. Stworzenia nowej funkcji, zadeklarowania zmiennych dla rowcount1 i rowcount2, uruchomienia procedury składowanej, która zwraca podzbiór wierszy z tabeli, a następnie określenia całej liczby wierszy dla tego ta sama tabela, przypisz ją do drugiej zmiennej, a następnie 1/2 x 100 ....

Czy istnieje jednak bardziej przejrzysty sposób na zrobienie tego, który nie skutkuje uruchomieniem wielu rzeczy, takich jak ta procedura składowana? Coś jak

select (count(*stored procedure name*) / select count(*) from table) x 100) as Percentage...

Przepraszam za ten gówniany scenariusz!

EDYCJA: Ktoś poprosił o więcej szczegółów. Ostatecznie, i żeby skrócić bardzo długą historię, chciałbym wiedzieć, jaka byłaby najszybsza i najbardziej zwięzła metoda procesora, aby pokazać procent wierszy zwracanych w procedurze składowanej, ze WSZYSTKICH dostępnych w niej wierszy stół. Czy to ma większy sens?

Kod w procedurze zapisanej jest poniżej:

SET @SQL = 'SELECT COUNT (DISTINCT c.ElementLabel), r.FirstName, r.LastName, c.LastReview, 
    CASE
        WHEN c.LastReview < DateAdd(month, -1, GetDate())  THEN ''OUT of Date''
        WHEN c.LastReview >= DateAdd(month, -1, GetDate()) THEN ''In Date'' 
        WHEN c.LastReview is NULL THEN ''Not Yet Reviewed'' END as [Update Status]

    FROM [Residents-'+@home_name+'] r
    LEFT JOIN [CarePlans-'+@home_name+'] c ON r.PersonID = c.PersonID
    WHERE r.Location = '''+@home_name+'''
    AND CarePlanType = 0
    GROUP BY r.LastName, r.FirstName, c.LastReview
    HAVING COUNT(ELEMENTLABEL) >= 14

Dzięki Ant

0
Ant 30 grudzień 2019, 23:29

1 odpowiedź

Najlepsza odpowiedź

Nie mogłem stwierdzić na podstawie Twojego pytania, czy próbujesz uzyskać liczbę i wynik w jednym zapytaniu. Jeśli wykonanie SP i osobne obliczenie liczby tabel jest w porządku, można zapisać wyniki procedury składowanej w tabeli tymczasowej.

CREATE TABLE #Results(ID INT, Value INT)

INSERT #Results EXEC myStoreProc @Parameter1, @Parameter2

SELECT 
     Result = ((SELECT COUNT(*) FROM #Results) / (select count(*) from table))* 100
0
Ross Bush 30 grudzień 2019, 21:21