[英]SQL query returns multiple rows when trying to find specific value
我有2張桌子。 在我的“任務”中,一個被稱為“任務”,另一個被稱為“ TaskDescription”,設置如下所示:“ taskID(primary)”,“ FileID”,“ TaskTypeID”和其他一系列無關的列。
然后在我的“ TaskDescription”中,設置如下:“ TaskTypeID”,“ TaskTypeDesc”
因此,例如,如果TaskTypeID為1,則說明將為“ admin”;如果TaskTypeID為2,則TaskTypeDesc將為“ Employee”,依此類推。
這兩個表在主鍵/外鍵“ TaskTypeID”上具有關系。
我想做的是獲取一個任務ID,以及TaskDesc,其中FileID與@fileID(我作為參數傳入)相匹配。 但是,在我的查詢中,嘗試獲取描述時,我返回的是多行而不是單行。
這是我的查詢:
SELECT taskid,
( 'Task ID: '
+ Cast(cf.taskid AS NVARCHAR(15)) + ' - '
+ Cast((SELECT DISTINCT td.tasktypedesc FROM casefiletaskdescriptions
td JOIN
casefiletasks cft ON td.tasktypeid=cft.tasktypeid WHERE cft.taskid =
1841 )AS
NVARCHAR(100))
+ ' - Investigator : ' + ( Cast(i.fname AS NVARCHAR(20)) + ' '
+ Cast(i.lname AS NVARCHAR(20)) ) ) AS
'Display'
FROM casefiletasks [cf]
JOIN investigators i
ON CF.taskasgnto = i.investigatorid
WHERE cf.fileid = 2011630988
AND cf.concluded = 0
AND cf.progressflag != 'Conclude'
我正在嘗試使輸出看起來像“任務ID:1234-管理-調查員:約翰·多伊”。 但是我在這方面遇到了麻煩:
CAST((select DISTINCT td.TaskTypeDesc from CaseFileTaskDescriptions td
JOIN CaseFileTasks cft ON td.TaskTypeID=cft.TaskTypeID
where cft.TaskID =1841 )as nvarchar(100))
這似乎可行,但問題是我必須對值“ 1841”進行硬編碼才能使其正常工作。 有沒有一種方法可以分配一個帶有從TaskID選擇查詢返回的值的“ taskID”變量,否則它將不起作用,因為我認為sql一次運行所有內容,而不是逐行運行。
編輯-這在Microsoft SQL Server Management Studio 2008中
您可以動態引用FROM
集中存在的列。 在這種情況下,它將是casefiletasks
或investigators
任何列。 您將用table.column
引用替換1841
。
更新
用列引用替換您的靜態整數,查詢將類似於:
SELECT taskid,
( 'Task ID: '
+ Cast(cf.taskid AS NVARCHAR(15)) + ' - '
+ Cast((SELECT DISTINCT td.tasktypedesc FROM casefiletaskdescriptions
td JOIN
casefiletasks cft ON td.tasktypeid=cft.tasktypeid WHERE cft.taskid =
cf.taskid )AS
NVARCHAR(100))
+ ' - Investigator : ' + ( Cast(i.fname AS NVARCHAR(20)) + ' '
+ Cast(i.lname AS NVARCHAR(20)) ) ) AS
'Display'
FROM casefiletasks [cf]
JOIN investigators i
ON CF.taskasgnto = i.investigatorid
WHERE cf.fileid = 2011630988
AND cf.concluded = 0
AND cf.progressflag != 'Conclude'
這可以作為您的內部查詢嗎?
SELECT DISTINCT td.TaskTypeDesc FROM CaseFileTaskDescriptions td
JOIN CaseFileTasks cft ON td.TaskTypeID = cft.TaskTypeID
WHERE cft.TaskID = cf.TaskID
為什么不只是做另一個聯接而不是子查詢呢?
SELECT taskid,
( 'Task ID: '
+ Cast(cf.taskid AS NVARCHAR(15)) + ' - '
+ Cast(td.tasktypedesc AS NVARCHAR(100))
+ ' - Investigator : ' + ( Cast(i.fname AS NVARCHAR(20)) + ' '
+ Cast(i.lname AS NVARCHAR(20)) ) ) AS
'Display'
FROM casefiletasks [cf]
JOIN investigators i
ON CF.taskasgnto = i.investigatorid
JOIN casefiletaskdescriptions td
ON td.tasktypeid = cf.tasktypeid
WHERE cf.fileid = 2011630988
AND cf.concluded = 0
AND cf.progressflag != 'Conclude'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.