0

この質問からわかると思いますが、私は非常に新しく、SQL に慣れていません。かなりの時間 (およびこの素晴らしい Web サイトの助けを借りて) を経て、必要なものをほぼ正確にリストするクエリを作成することができました。

Select p1.user.Office, 
p1.user.Loc_No, 
p1.user.Name, 
p1.user.Code, 
p1.user.Default_Freq, 
(Select distinct MAX(p2.pay.Paycheck_PayDate) 
from p2.pay
where p1.user.Client_TAS_CL_UNIQUE = p2.pay.CL_UniqueID) as Last_Paycheck

from
PR.client 

where 
p1.user.Client_End_Date is null
and p1.user.Client_Region = 'Z'
and p1.user.Client_Office <> 'ZF'
and substring(p1.user. Code,2,1) <> '0'

ここで、次のロジックを使用して、これをもう少しフィルタリングする必要があります。

Default_Freq = 'W' の場合、Last_Paycheck が現在の日付から 7 日以上経過しているクライアントのみを出力します

Default_Freq = 'B' の場合、Last_Paycheck が現在の日付から 14 日以上経過しているクライアントのみを出力します

などなど

これが可能であることはわかっていますが、構文をどのように開始すればよいかわかりません。Where 句内で Case ステートメントを使用する必要があると思いますか? いつものように、どんな助けも大歓迎です!

4

4 に答える 4

2
SELECT

X.p1.user.Office, 
X.p1.user.Loc_No, 
X.p1.user.Name, 
X.p1.user.Code, 
X.Default_Freq, 
X.Last_Paycheck

FROM

(Select 
p1.user.Office, 
p1.user.Loc_No, 
p1.user.Name, 
p1.user.Code, 
p1.user.Default_Freq AS Default_Freq, 
(Select distinct MAX(p2.pay.Paycheck_PayDate) 
from p2.pay
where p1.user.Client_TAS_CL_UNIQUE = p2.pay.CL_UniqueID) as Last_Paycheck

from
PR.client 

where 
p1.user.Client_End_Date is null
and p1.user.Client_Region = 'Z'
and p1.user.Client_Office <> 'ZF'
and substring(p1.user. Code,2,1) <> '0') X
WHERE (
      (X.Default_Freq = 'W' AND (DATEDIFF ( d , X.Last_Paycheck , @currentDate) >= 7))
      OR (X.Default_Freq = 'B' AND (DATEDIFF ( d , X.Last_Paycheck , @currentDate) >= 14))
    )  
于 2013-09-04T20:26:24.973 に答える
0

case ステートメントを作成し、それを where 句に入れます。

すなわち(私の頭の上から):

CASE 
  WHEN (Default_Freq = 'W' AND DATEDIFF(DAY,Last_Paycheck,GETDATE()) >= 7) THEN 1
  WHEN (Default_Freq = 'B' AND DATEDIFF(DAY,Last_Paycheck,GETDATE()) >= 14) THEN 1
ELSE 0 END = 1
于 2013-09-04T20:43:25.310 に答える
0

内部クエリでこれを試してください:

select * from (
  Select 
    p1.user.Office, 
    p1.user.Loc_No, 
    p1.user.Name, 
    p1.user.Code, 
    p1.user.Default_Freq, 
    (Select distinct MAX(p2.pay.Paycheck_PayDate) 
     from p2.pay
     where p1.user.Client_TAS_CL_UNIQUE = p2.pay.CL_UniqueID) as Last_Paycheck
  from PR.client 
  where p1.user.Client_End_Date is null
    and p1.user.Client_Region = 'Z'
    and p1.user.Client_Office <> 'ZF'
    and substring(p1.user. Code,2,1) <> '0') t
where (
     (Default_Freq = 'W' AND (DATEDIFF ( d , Last_Paycheck , @currentDate) <= 7))
  OR (Default_Freq = 'B' AND (DATEDIFF ( d , Last_Paycheck , @currentDate) <= 14))
)  
于 2013-09-04T21:01:06.820 に答える
0

現在のクエリを派生テーブルまたは CTE として使用します (CTE は SQL Server 2005 以降に存在します)。そして、次のことができます:

;WITH CTE AS
(
    --- Your current query here
)
SELECT *
FROM CTE
WHERE (Default_Freq = 'W' AND DATEDIFF(DAY,Last_Paycheck,GETDATE()) >= 7)
OR (Default_Freq = 'B' AND DATEDIFF(DAY,Last_Paycheck,GETDATE()) >= 14)
OR () -- keep going
于 2013-09-04T20:29:09.270 に答える