Telemach [ Pretorianin ]
Pomoc w zapytaniu SQL
Mam taką tabelę:
point_id - point_article- point_sender - point_receiver - point_value
odpowiednio mam wartości:
- 1 - 6 - 3 - 2 - 1
- 2 - 6 - 4 - 2 - 2
- 3 - 5 - 2 - 1 - 3
Jest to system przyznawania punktów użytkownikom w związku z artykułem, który napisali. Czyli użytkownik A (sender) przyznaje B (receiver) 3 punkty (value) za określony temat (article).
Umożliwiam przyznanie 1,2 lub 3 punktów.
I teraz chciałbym zliczyć ile razy dla danego tematu przyznano 1, 2 lub 3 punkty.
I mam taką procedurę:
ALTER PROCEDURE dbo.CheckAwards
@topic_id int
AS
SELECT COUNT(point_id) AS Point1
FROM dbo.points
WHERE (point_topic_id = @article_id) AND (point_value = 1)
SELECT COUNT(point_id) AS Point2
FROM dbo.points
WHERE (point_topic_id = @article_id) AND (point_value = 2)
SELECT COUNT(point_id) AS Point3
FROM dbo.points
WHERE (point_topic_id = @article_id) AND (point_value = 3)
Return
Tylko ta procedura wyrzuca mi wynik w postaci 3 niezależnych rekordów. Nie tak jak pojedynczy select i dostaję 3 rekordy, tutaj każdy rekord traktowany jest oddzielnie (jak tabela?).
Mógłby mnie ktoś naprowadzić jak tą procedurę przekształcić, żeby dostać pożądany wynik taki, jak w przypadku pojedynczego selecta?
wysia [ Senator ]
SELECT point_value, Count(point_value) FROM dbo.points WHERE (point_topic_id = @article_id) GROUP BY point_value ORDER BY point_value
Telemach [ Pretorianin ]
@wysia
Tylko, że ja chcę uzyskać wynik, ile punków o wartości 1, 2 i 3 uzyskał dany artykuł, czyli:
- article_id - point1 - point2 - point3
- 33 - 3 - 2 - 0
Czyli artykuł o id=33 uzyskał 3 x 1 punkt, 2 x 2 punkty i zero punktów 3.

wysia [ Senator ]
To odpal tego selecta, i zobacz co wyjdzie..
Nie ma za co:)

Telemach [ Pretorianin ]
Wiedziałem, że banalne :)
Dziękuję Ci bardzo.
Jak widać rozwiązanie zazwyczaj leży bliżej niż sądzimy :)
Telemach [ Pretorianin ]
A mógłbyś mi pomóc, żeby zastosować do tego zapytania funkcję PIVOT, bo nie bardzo sobie z tym mogę poradzić. Chciałbym zamienić wiersze z kolumnami.
Telemach [ Pretorianin ]
^