3

いくつかのテーブルで最大列値を取得しようとしています。たとえば、以下のスニペット (機能しません) では、3 つのテーブル A、B、C のすべてにある列名「tickvalue」から最大値を取得しようとしています。値を取得する方法がわかりません。

tickvalue 列のデータ型はタイムスタンプです。

select 
c.somkey
,MAX(a.tickvalue, b.tickvalue, c.tickvalue) as tickvalue
from A as a
join B as b
on a.key = b.key
join C as c
on b.somekey = c.somkey
where a.key = '<some key>'

ありがとう

4

3 に答える 3

3

これは、MAX()集計関数が TSQL でどのように機能するかではありません (こちらを参照してください: TSQL MAX() ) MAX 関数は、1 つの列のみで最大値を取得します。

ここで目的を達成するには、3 つの値を 1 つの列に入れる必要があります。これはPIVOT/UNPIVOTを使用して実行できますUNPIVOT

このスニペットはあなたを助けるかもしれません.

CREATE TABLE #A (ID INT, tickvalue INT)
CREATE TABLE #B (ID INT, tickvalue INT)
CREATE TABLE #C (ID INT, tickvalue INT)

INSERT INTO #A VALUES (1,1)
INSERT INTO #A VALUES (2,4)
INSERT INTO #A VALUES (3,7)
INSERT INTO #A VALUES (4,2)
INSERT INTO #A VALUES (5,8)

INSERT INTO #B VALUES (1,8)
INSERT INTO #B VALUES (2,7)
INSERT INTO #B VALUES (3,2)
INSERT INTO #B VALUES (4,4)
INSERT INTO #B VALUES (5,1)

INSERT INTO #C VALUES (1,2)
INSERT INTO #C VALUES (2,1)
INSERT INTO #C VALUES (3,2)
INSERT INTO #C VALUES (4,15)
INSERT INTO #C VALUES (5,2)


SELECT ID, MAX(tickvalue)
FROM
(SELECT C.ID, A.tickvalue t1, B.tickvalue t2, C.tickvalue t3
FROM #A AS a
JOIN #B AS b ON a.ID = b.ID
JOIN #C AS c ON b.ID = c.ID) p
UNPIVOT (tickvalue FOR tsource IN (t1,t2,t3)) AS unpvt
GROUP BY ID

DROP TABLE #A
DROP TABLE #B
DROP TABLE #C
于 2012-11-28T01:46:15.860 に答える
1

使用の代替 UNPIVOTE

SELECT c.ID,
       CASE WHEN a.tickvalue >= b.tickvalue THEN
                                                 CASE WHEN a.tickvalue >= c.tickvalue THEN a.tickvalue ELSE c.tickvalue END
                                            ELSE CASE WHEN b.tickvalue >= c.tickvalue THEN b.tickvalue ELSE c.tickvalue END END
FROM A a JOIN B b ON a.ID = b.ID
         JOIN C c ON b.ID = c.ID
于 2012-11-28T09:01:09.207 に答える
1

オラクルには、同じことを行う最高の機能があります。何度か前に、ここで入手できる Sql Server で同じものを書きました。見てください、それが目的に役立つと思います。

于 2012-11-28T03:02:43.460 に答える