2012-03-05 14 views
0

私は、顧客の連絡先を追跡するデータベースを作成しています。最初の連絡先のターゲット連絡先は、この計算を処理する関数を作成しました。データベース内のユーザーごとに行の値が存在することを確認する

私はすべての連絡先がに入力されているカスタマーコンタクトログテーブルを持っています。

mssql2005にメールスクリプトが設定されています。連絡先が作成されていないか、90日後にログが入力されたときにマネージャのメールボックスにリストを送信します。

私は接触が存在しないかどうかを判断するために、SQLに苦しんだか、それが存在するが破られた場合には、以下の私のスクリプトを見てみてください。私はそれをできるだけ読みやすくしようとしてきました

DECLARE @tmp INT 

SELECT m.id               AS 
     [Case ID], 
     CONVERT(VARCHAR, userdbjhv25.dbo.Calcdate(oc.firstdate), 103) AS 
     [Target Contact Date] 
FROM userdbjhv25.dbo.USER v, 
     userdbjhv25.dbo.customer o, 
     userdbjhv25.dbo.maincase m, 
     userdbjhv25.dbo.usercase vc, 
     userdbjhv25.dbo.customercase oc, 
     contactlist r 
WHERE m.id = vc.caseid 
     AND v.userid = vc.userid 
     AND m.id = oc.caseid 
     AND o.customerid = oc.customerid 
     AND userdbjhv25.dbo.Calcdate(oc.firstdate) <= Getdate() 
     AND (@tmp IS NOT NULL 
      AND NOT EXISTS (SELECT 1 
          FROM contactlist r1 
          WHERE r1.caseno = vc.usercase 
            AND r1.conlogtype = 'Initial Contact') 
       OR ((@tmp IN(SELECT 1 
          FROM contactlist r2, 
            usercase vc2, 
            USER v2, 
            customercase oc2, 
            maincase m2, 
            customer o2 
          WHERE m2.id = oc2.caseid 
            AND o2.customerid = oc2.customerid 
            AND r2.conlogtype = 'Initial Contact' 
            AND r2.caseno = vc.usercase 
            AND 
          userdbjhv25.dbo.Calcdate(oc2.firstdate) < r2.postdate 
          ) 
       ))) 
+3

http://www.dpriver.com/pp/sqlformat.htmはあなたの友人です。 –

+0

ああ、素晴らしいリンク!感謝ジェームス –

答えて

0

私は左の参加があなたの友人になると思います。私はあなたのスキーマを十分に視覚化することができませんが、左(または右のジョイン)の背後にあるアイデアは、データがデータセットの1つに存在しない可能性があるということです。これが起こると、ヌルでいっぱいの行が返されます。しかし、それがマッチすると、一致したデータが返されます。したがって、いくつかのpsedoコード:

select m.id AS [Case ID], 
     CONVERT(VARCHAR, userdbjhv25.dbo.Calcdate(oc.firstdate), 103) AS [Target Contact Date] 
from userdbjhv25.dbo.customer o 
left join userdbjhv25.dbo.customercase oc 
    on o.customerid = oc.customerid 
where oc.firstdate is null or datediff(day, oc.firstdate, getdate()) > 90 

これをあなたのスキーマに適応させれば、あなたはうまくいくはずです。

関連する問題