Frage

Ich habe eine Daten geschrieben. Welche Stunde des Tages stellt ein Benutzer Fragen und Antworten veröffentlicht. Sie können die SQL dort sehen. Die Ergebnisse sehen derzeit so aus:

hour hour questions answers 
---- ---- --------- ------- 
0    0    1         4       
null 2    null      4       
null 3    null      5       
null 4    null      7       
null 5    null      11      
null 6    null      10      
null 7    null      6       
null 8    null      1       
null 13   null      1       
null 14   null      7       
null 15   null      8       
null 16   null      11      
null 17   null      4       
null 18   null      10      
null 19   null      4       
null 20   null      6       
null 21   null      7       
22   22   1         6       
null 23   null      2     

Wie kann ich die Abfrage an:

  1. Zusammenführen beide Stundenspalten in eine einzelne Spalte und
  2. Wenn Fragen/Antworten sind null, einstellen 0 stattdessen.

Teil 2 hat eine niedrige Priorität.

Bearbeiten: Hier ist die vollständige SQL der ursprünglichen Abfrage, da ich sie basierend auf der Antwort verbessern kann:

SELECT
   q.hour, a.hour, questions, answers
FROM
(
   SELECT
     datepart(hour,creationdate) AS hour,
     count(*) AS questions
   FROM posts
   WHERE posttypeid=1 AND OwnerUserId=##UserID##
   GROUP BY datepart(hour,creationdate)
) q
FULL JOIN 
(
   SELECT
     datepart(hour,creationdate) AS hour,
     count(*) AS answers
   FROM posts
   WHERE posttypeid=2 AND OwnerUserId=##UserID##
   GROUP BY datepart(hour,creationdate)
) a
ON q.hour = a.hour
ORDER BY a.hour, q.hour
War es hilfreich?

Lösung

SELECT
   ISNULL(q.hour, a.hour) AS hour, 
   ISNULL(questions,0) AS questions, 
   ISNULL(answers,0) AS answers

Oder schreiben Sie die Abfrage neu, um die loszuwerden full join

   SELECT
     datepart(hour,creationdate) AS hour,
     count(CASE WHEN posttypeid = 1 THEN 1 END) AS questions,
     count(CASE WHEN posttypeid = 2 THEN 1 END) AS answers
   FROM posts
   WHERE posttypeid IN (1,2) AND OwnerUserId=##UserID##
   GROUP BY datepart(hour,creationdate)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top