1

SQL クエリで一時テーブルまたはテーブル変数を使用できないいくつかの制限に対する回避策 (ハック) を見つけようとしています。

私はいくつかの必要なフィールドを欠いている実際のテーブル (技術的には、設計が不十分なテーブルの UNPIVOT から生じる派生テーブルです) を持っています。データベースの問題を解決できるまで、これらのフィールドを結果にハードコーディングする必要があります。

次のようなテーブルがあるとします。

tblEntity
ID | Name
 1 |  One
 2 |  Two

次のようないくつかのフィールドに参加する必要があります。

ID | Order
 1 |     2
 2 |     1

結合すると、次のようになります。

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

私の質問は次のように作成された結果セットに tblEntity を結合できますか?

SELECT 1, 2
UNION ALL
SELECT 2, 1

入会は可能ですか?もしそうなら、構文は何ですか?

4

4 に答える 4

2

いくつかの仮定をすると、これはそれを行います:

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
于 2011-12-15T23:35:30.420 に答える
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
于 2011-12-15T23:35:38.930 に答える
2

SQL-Server 2008 では、以下も使用できます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でテストできます。

于 2011-12-15T23:47:55.217 に答える
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;

例 2

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

例 3

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;

...等々。

于 2011-12-16T08:44:33.640 に答える