2011-12-15 6 views
1

SQLクエリで一時テーブルやテーブル変数を使用できないような制限があるため、回避策(ハック)を見つけようとしています。SQL - 複数のselect/union-allによって作成された結果セットにテーブルを結合することは可能ですか?

私は、いくつかの必要なフィールドが不足している実テーブル(技術的には、うまく設計されていないテーブルのUNPIVOTに由来する派生テーブルです)を持っています。データベースの問題を解決するまで、これらのフィールドを結果にハードコードする必要があります。私のようないくつかの分野に参加する必要が

tblEntity 
ID | Name 
1 | One 
2 | Two 

::私の質問がある

ID | Name | Order 
1 | One |  2 
2 | Two |  1 

:でき

ID | Order 
1 |  2 
2 |  1 

参加をしてしまうようなテーブルは、与えられた

私は、次のように作成された結果セットにtblEntityを結合します:

SELECT 1, 2 
UNION ALL 
SELECT 2, 1 

参加できますか?もしそうなら、構文は何ですか?いくつかの仮定を作る

答えて

2
select te.*, t.Ord from tblEntity te 
inner join (
    SELECT 1 as Id, 2 as Ord 
    UNION ALL 
    SELECT 2, 1 
) t on te.ID = t.Id 
2

が、これはそれを行うだろう:SQL-Server 2008では

SELECT en.ID, en.Name, xx.OrderBy 
from tblEntity en 
    inner join (select 1 Id, 2 OrderBy 
       union all 
       select 2,1) xx 
    on xx.Id = en.ID 
2

を、それがTable Value Constructorsを使用することも可能です:

CREATE TABLE #tblEntity 
(ID INT 
, Name CHAR(10) 
) ; 

INSERT INTO #tblEntity 
    (ID, Name) 
VALUES 
    (1, 'One') , 
    (2, 'Two') ; 

SELECT 
    t.ID, t.Name, o.Ordr AS "Order" 
FROM 
     #tblEntity AS t 
    JOIN 
     (VALUES 
      (1,2) 
      , (2,1) 
     ) AS o(ID, Ordr) 
     ON o.ID = t.ID ; 

かをテストすることができます上:data.stackexchange.com

+0

多くのおかげで、私はこの機能を認識していませんでした! – STW

+0

私はこれらについて忘れました。使用するのが少し面倒ですが、UNIONを使って周りを回るよりも良いです。 –

0

例えばこれを行う。

WITH T1 (Id, "Order") 
    AS 
    (
     SELECT 1, 2 
     UNION ALL 
     SELECT 2, 1 
    ) 
SELECT e.*, T1."Order" 
    FROM tblEntity e 
     JOIN T1 
      ON e.Id = T1.Id; 
SELECT e.*, T1."Order" 
    FROM tblEntity e 
     JOIN (
      VALUES (1, 2), 
        (2, 1) 
      ) AS T1 (Id, "Order") 
      ON e.Id = T1.Id; 
WITH T1 
    AS 
    (
     SELECT * 
     FROM (
       VALUES (1, 2), 
        (2, 1) 
      ) AS T (Id, "Order") 
    ) 
SELECT e.*, T1."Order" 
    FROM tblEntity e 
     JOIN T1 
      ON e.Id = T1.Id; 

...など。

関連する問題