2014-09-02 46 views
1

好的,我想要做的是我试图获取所有已注册的帐户。这是我在校外的第一份实际报告,所以请和我一起裸露因为我没有经历过。获得正确的加入

我有4张桌子。

的tAuditTracking拥有所有用户的信息如下的:

ID Contract_ID  IP Address   LoginID  Activity Step 
1  376877   192.111.4.100  [email protected]  1   Login 
2  376878   192.111.4.100  [email protected]  2   Enroll 
3  376879   192.111.4.100  [email protected]  3   LogOut 


ActivityStatus 
    1 
    1 
    2 

二是tlkCustPortalStatus

StatusID Portal Status 
1    Pass 
2    Fail 

第三张表是tlkCustPortalActivities

ActivityID   Portal Activity 
1      Login 
2      Enroll 
3      Logout 

最后一个表是tcontract

Contract_ID  Account Number 
376877    34104253 
376878    35104252 
376879    31104257 

这是我的代码。我知道它很可怕,但我正在帮助我的上司。所以请任何提示或帮助,将不胜感激

ALTER PROC spCustPortalEnrolledAccounts 


(@ENROLLED INT) 


As 
Begin 

SELECT A.ID, A.CONTRACT_ID, 'A.IP ADDRESS',A.DATE,A.LOGINID,A.ACTIVITY,A.STEP,A.ACTIVITYSTS,A.ADDITIONALDATA,B.ENROLL 
FROM tAuditTracking A 

JOIN tlkCustPortalActivities B ON B.ActivityID = A.Contract_id 
WHERE B.ActivityID = 2 

END 
GO 

EXEC spCustPortalEnrolledAccounts'2' 
+0

为什么这个参数(@ENROLLED INT),当你不使用它在你的查询中?你可以在你的查询中使用它,比如Where B.ActivityID = @ENROLLED而不是B.ActivityID = 2 – 2014-09-02 16:39:14

+0

我想如果我只是为一个报告中的所有登记帐户创建报告,我甚至不需要参数。 – user3753188 2014-09-02 16:43:01

+0

看起来像你在这里问的同一个问题。 http://www.sqlservercentral.com/Forums/Topic1609686-391-1.aspx – 2014-09-02 17:09:16

回答

0

几个问题。 ram_sql指出您使用的是参数,甚至EXECing一个值的过程,但在实际的存储过程这个值是硬编码为

WHERE B.ActivityID = 2 

改变,要

WHERE B.ActivityID = @ENROLLED 

其次,和更重要的是,我只能猜测运行该程序的网络不行或很少?根据你在表格中得到的值,下面的连接没什么意义。

FROM tAuditTracking A 
JOIN tlkCustPortalActivities B ON B.ActivityID = A.Contract_id 

您的A.Contract_ID值是6位数字值,但您的B.ActivityID值是单数位数字。

虽然接下来的事情不太可能是你想要的,而且我基于你试图加入CONTRACT_ID的事实,这似乎与表tcontract有关系,但是没有足够的信息可以从tAudit通过tcontractTrackng加入ContractID到tlkCustPortalActivities。然而,它似乎以满足您的需求,以从所提供的参数值tAuditTracking获取所有帐户(在这种情况下,2就读)

SELECT A.ID, A.CONTRACT_ID, 'A.IPADDRESS',A.DATE,A.LOGINID,A.ACTIVITY, 
A.STEP,A.ACTIVITYSTS,A.ADDITIONALDATA,B.ENROLL 
FROM tAuditTracking A 
JOIN tlkCustPortalActivities B ON B.ActivityID = A.ActivityID 
WHERE B.ActivityID = @ENROLLED 
+0

谢谢你的帮助。我明白你的意思,而且我从代码中学到了很多东西。非常感谢你解释,而不是像大多数人在这里一样成为一个小人 – user3753188 2014-09-02 18:28:58