我有查詢:
select coalesce(VV1.[TimeStamp], VV2.[TimeStamp]...) as MyDate, V1, V2, .. VN
from VV1
full join VV2
full join VV3
...
full outer join VVN
on VV1.TimeStamp = VV2.TimeStamp
and VV2.TimeStamp = VV3.TimeStamp
...
and VVN-1.TimeStamp = VVN.TimeStamp
我想生成它作爲字符串,但它的複雜與on
一部分......所以
- 是否有可能把它寫在更好的辦法?
- 也許不知怎麼寫
on AllOfThemAreEqual(VV1.TimeStamp, VV2.TimeStamp .. VVN.TimeStamp)
?但我懷疑這是可能的:( - 也許這是可以存儲在臨時變量先前的值,然後從那裏提取這最後的選擇看起來最真實的我
SQLFibble:?http://sqlfiddle.com/#!6/4e138/3/0
CREATE TABLE T1(
[ValueId] [bigint] IDENTITY(1,1) NOT NULL,
[PointId] [int] NULL,
[Value] [int] NULL,
[TimeStamp] [datetime] NULL
);
INSERT INTO T1
([PointId]
,[Value]
,[TimeStamp])
VALUES
(1, 1, 1900-01-01)
INSERT INTO T1
([PointId]
,[Value]
,[TimeStamp])
VALUES
(2, 2, 1900-01-01)
;
和
WITH VV1 AS (
SELECT [TimeStamp], [Value] AS V1 FROM T1
WHERE [PointId] = 1
), VV2 AS (
SELECT [TimeStamp], [Value] AS V2 FROM T1
WHERE [PointId] = 2
)
SELECT
coalesce(VV1.[TimeStamp], VV2.[TimeStamp]) AS dt
, V1, V2
FROM VV1
FULL JOIN VV2
ON VV1.TimeStamp = VV2.TimeStamp
全外的用例加入很少,而且相距甚遠在大多數現實世界的應用。如果你看到一個警報鈴,你的腦袋就會響起。不要輕易使用它們。 – Tomalak
爲什麼'FULL OUTER'加入而不是'INNER'? – gvee
INNER不返回任何數據......它們不會交叉,但'full join'將返回相同的數據。 – Cynede