簡體   English   中英

嘗試查找特定值時,SQL查詢返回多行

[英]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集中存在的列。 在這種情況下,它將是casefiletasksinvestigators任何列。 您將用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM