2011-12-28 2 views
1

こんにちは私は過去6ヶ月の登録データを返すようなクエリを持っていますが、データは少なくとも1人の登録があれば表示されますが、登録がない月をどのように表示できますかまあ?私は、私はおそらく、この行に何かをする必要があります知っている:SQL Server + nullデータを返す

LEFT(CONVERT(varchar, issuedate, 112), 6) BETWEEN 
    LEFT(CONVERT(varchar, DATEADD(MM, -6, GETDATE()), 112), 6) AND 
    LEFT(CONVERT(varchar, GETDATE(), 112), 6) 

感謝。

SELECT 
    DateName(month,issuedate) + ' ' + CAST(Year(issuedate) as Char(4)) as IssueDate, 
    COUNT(distinct m.ID) AS SignUps 
FROM 
    Member m 
INNER JOIN 
    Card c ON m.ID = c.MemberID 
WHERE 
    m.Deletedby is null 
    AND c.Deletedby is null 
    AND LEFT(CONVERT(varchar, issuedate, 112), 6) BETWEEN 
      LEFT(CONVERT(varchar, DATEADD(MM, -6, GETDATE()), 112), 6) 
      AND LEFT(CONVERT(varchar, GETDATE(), 112), 6) 
GROUP BY 
    DateName(month, issuedate) + ' ' + CAST(Year(issuedate) AS Char(4)), CAST(CAST(YEAR(issuedate) AS VARCHAR) + '/'+ CAST(MONTH(issuedate) AS VARCHAR) +'/1' AS DateTime) 
+0

単にその条件が何をしたい達成取り除くと思いませんか? – ToddBFisher

答えて

2

観察:
1.テーブル名は、それらが接続されている方法を意味するものではありません。
2.使用しているような関数を使用すると、正しいインデックスは使用されません。
3.すべての列参照は、コードを分かりやすくするために、テーブルの別名で修飾する必要があります。
4. getdate()は非決定的な関数であり、不正なクエリ計画の原因となります。 spに日付を渡します。

カードテーブルのエントリは、一部のメンバーは、カードに登録するときに作成されると仮定すると: -

SELECT 
    <month_year_string> as IssueDate, 
    COUNT(distinct c.memberid) AS SignUps 
FROM 
    Member m 
lEFT OUTER JOIN 
    Card c ON m.ID = c.MemberID  AND c.Deletedby is null 
WHERE 
    m.Deletedby is null 
    AND c.issuedate BETWEEN DATEADD(MM, -6, GETDATE()) AND GETDATE() 
GROUP BY <month_year_string> 
+0

ポインタをありがとうが、nullデータを表示する私の問題を解決しません。 – k80sg

関連する問題