2011-07-14 16 views
0
SELECT 
    'Registered End Users' AS 'Report Name', 
    'Above Date Range' AS 'Desc', 
    CONVERT(VARCHAR, COUNT(*)) AS VALUE 
FROM 
    WAPI_CUSTOMERS C 
WHERE 
    C.ID NOT IN (SELECT S.CUSTOMER_ID FROM WAPI_SUBSCRIPTIONS S) 
    AND 
     CASE C.BASIC_REG_DATE IS NULL THEN C.FULL_REG_DATE BETWEEN @FROM_DATE AND @TO_DATE 
      WHEN C.FULL_REG_DATE IS NULL THEN C.BASIC_REG_DATE BETWEEN @FROM_DATE AND @TO_DATE 
     END 

実際には、wapi_customerswapi_subscribersの2つのテーブルがあります。私は、ユーザーの選択した日付範囲の間のサブスクライバテーブルにない顧客テーブルのすべての行を取得している。SQL Serverクエリの問題

カスタマーテーブルには、基本とフルの2種類の顧客があります。 isbasic=1basregdate=somedatefullregdate=1fulldate=somedate:基本的な顧客はisbasic=1basicregdate=somedateisfull=0fullregdate=null

  • フル顧客がフルに基本からアップグレードされisbasic=0basicregdate=nullisfull=1fullregdate=somedate
  • ケースを持っている

    今、私は上記の条件に従う顧客をカウントする必要があり、私が正しくあなたを理解している場合、基本的な の場合には、我々はC.FULL_REG_DATE or C.BASIC_REG_DATE BETWEEN @FROM_DATE AND @TO_DATE

    はPlzを

  • +1

    どうしましょう? –

    +0

    コースにはまだジョインを教えていますか?彼らははるかに高速です。 – SteveCav

    +0

    質問はこの論理 –

    答えて

    0

    を助けるC.BASIC_REG_DATE BETWEEN @FROM_DATE AND @TO_DATEを使用して フルC.FULL_REG_DATE BETWEEN @FROM_DATE AND @TO_DATEの場合には、アップグレードの場合にことを意味します次のような場合は、あなたのために役立つものがあります:

    where 
    ( 
          (isbasic = 1 and basicregdate is not null and isfull=0 ) 
          and C.BASIC_REG_DATE BETWEEN @FROM_DATE AND @TO_DATE 
        ) 
    or 
    ( 
          (isbasic=0 and fullregdate=null and isfull=1 and fullregdate is not null) 
          and C.FULL_REG_DATE BETWEEN @FROM_DATE AND @TO_DATE 
        ) 
    or 
    (
         (isbasic=1 and basregdate is not null and fullregdate=1) 
         and C.BASIC_REG_DATE BETWEEN @FROM_DATE AND @TO_DATE 
    ) 
    
    +0

    (isbasic = 1、basregdateはnullではなく、fullregdate = 1)のクエリを作成します とC.BASIC_REG_DATEの間に@FROM_DATEと@TO_DATEこの場合、私は基本または完全な日付の両方をチェックする必要があります –