0

ひねりを加えた典型的な質問があります。

次の T SQL クエリを変更する必要があります。現在、情報を得るために 1 つのテーブルのみを検索します。情報を得るために、同じ列を持つ 2 つのテーブルを調べる必要があります。1 つのテーブルには現在の従業員が含まれ、もう 1 つのテーブルには元従業員が含まれます

SELECT t.net_Id
      ,e.fname
      ,e.lname
FROM tblTrackingEmployee t
    join view_employee e 
        on e.net_id = t.net_id
where trackingid = @trackingId
and empType = @empType

私が考えていたのは、ユニオンを使用して両方を調べることです。従業員はいずれかのテーブルに表示されますが、両方に表示されることはありません。

SELECT t.net_Id
      ,e.fname
      ,e.lname
FROM tblTrackingEmployee t
    JOIN view_employee e
        ON e.net_id = t.net_id
WHERE trackingid = @trackingId
AND empType = @empType
union 
SELECT t.net_Id
      ,fe.fname
      ,fe.lname
FROM tblTrackingEmployee t
      JOIN view_employee fe 
             ON fe.net_id = t.net_id
WHERE trackingid = @trackingId
AND empType = @empType

ただし、ここにひねりがあります。返された人が現在の従業員か元従業員かを知る必要があります。返されたテーブルに、現在の従業員の場合は 1、元従業員の場合は 0 の列を追加する方法はありますか? 各 trackingId には、潜在的に両方のタイプの従業員が含まれる可能性があります。

4

3 に答える 3

2

各句に定数列を追加しますSELECT- 別名を付けることができます:

SELECT t.net_Id
      ,e.fname
      ,e.lname
      ,'Current' AS Type
FROM tblTrackingEmployee t
    JOIN view_employee e
        ON e.net_id = t.net_id
WHERE trackingid = @trackingId
AND empType = @empType
union 
SELECT t.net_Id
      ,fe.fname
      ,fe.lname
      ,'Former'
FROM tblTrackingEmployee t
      JOIN view_formerEmployee fe 
             ON fe.net_id = t.net_id
WHERE trackingid = @trackingId
AND empType = @empType
于 2012-07-06T20:28:51.983 に答える
1

はっきりさせておきますが、テーブルが 2 つあり、1 つには現在の従業員が、もう 1 つは元従業員がいますか? これは、ステータス (「アクティブ」/「非アクティブ」) を持つ 1 つのテーブルを持つことができたので、まずい考えでした。intいずれにせよ、各クエリに必要な のようなフィールドを追加するだけです

SELECT
 0 AS TheField,
  ....
FROM
  Table
UNION ALL
SELECT
1 AS TheField,
 ...
FROM
  table
于 2012-07-06T20:30:37.357 に答える
1

必要に応じて、ステータスで並べ替えることもできます。

 SELECT U.* FROM
 (
  SELECT t.net_Id AS ID
      ,e.fname AS FName
      ,e.lname AS LName
      ,'Current' AS EmployStatus
  FROM tblTrackingEmployee t
      JOIN view_employee e
          ON e.net_id = t.net_id
  WHERE trackingid = @trackingId
  AND empType = @empType
  union 
  SELECT t.net_Id AS ID
      ,fe.fname AS FName
      ,fe.lname AS LName
      ,'Former' AS EmployStatus
  FROM tblTrackingEmployee t
        JOIN view_formerEmployee fe
               ON fe.net_id = t.net_id
  WHERE trackingid = @trackingId
    AND empType = @empType
) AS U
 ORDER BY U.EmployStatus
于 2012-07-06T20:31:08.630 に答える