0

私は2つのテーブルを持っています。1つは「タスク」と呼ばれ、もう1つは「タスク」では「TaskDescription」と呼ばれます。セットアップは次のようになります:「taskID(primary)」、「FileID」、「TaskTypeID」およびその他の無関係な列の束。

次に、私の「TaskDescription」では、セットアップは「TaskTypeID」、「TaskTypeDesc」のようになります。

たとえば、TaskTypeIDが1の場合、説明は「admin」になり、TaskTypeIDが2の場合、TaskTypeDescは「Employee」になります。

2つのテーブルは、主キー/外部キー「TaskTypeID」に関係があります。

私がやろうとしているのは、タスクIDと、FileIDが@fileID(パラメーターとして渡す)と一致するTaskDescを取得することです。ただし、私のクエリでは、説明を取得しようとすると、単一の行ではなく複数の行が返されます。

これは私の質問です:

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-管理者-調査員:JohnDoe」のように出力を取得しようとしています。しかし、私はこの部分で問題を抱えています:

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が行ごとではなくすべてを一度に実行すると思うので機能しませんか。

編集-これはMicrosoftSQLServer ManagementStudio2008にあります

4

3 に答える 3

2

セットに存在する列を動的に参照できますFROM。この場合、casefiletasksまたはからの任意の列になりますinvestigators1841参照に置き換えtable.columnます。

アップデート

静的整数を列参照に置き換えると、クエリは次のようになります。

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' 
于 2012-10-24T15:09:12.840 に答える
1

これは内部クエリとして機能しますか?

SELECT DISTINCT td.TaskTypeDesc FROM CaseFileTaskDescriptions td 
JOIN CaseFileTasks cft ON td.TaskTypeID = cft.TaskTypeID 
WHERE cft.TaskID = cf.TaskID
于 2012-10-24T15:04:03.053 に答える
1

サブクエリの代わりに別の結合を実行しないのはなぜですか?

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' 
于 2012-10-24T15:21:44.447 に答える