Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 t-sql查询中的MAX函数_Sql Server 2008_Tsql_Sql Server 2008 R2 - Fatal编程技术网

Sql server 2008 t-sql查询中的MAX函数

Sql server 2008 t-sql查询中的MAX函数,sql-server-2008,tsql,sql-server-2008-r2,Sql Server 2008,Tsql,Sql Server 2008 R2,我试图在几个表中获得最大列值。例如,在下面的代码片段中(它不起作用),我正在尝试 从所有3个表a、B和C中的列名“tickvalue”中获取最大值。不确定如何获取该值 tickvalue列的数据类型是timestamp 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

我试图在几个表中获得最大列值。例如,在下面的代码片段中(它不起作用),我正在尝试 从所有3个表a、B和C中的列名“tickvalue”中获取最大值。不确定如何获取该值

tickvalue列的数据类型是timestamp

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>'
选择
c、 松基
,最大值(a.tickvalue,b.tickvalue,c.tickvalue)作为tickvalue
从一个
以B的身份加入B
按a键=按b键
以C的身份加入C
在b.somekey=c.somkey上
其中a.key=''

感谢这不是TSQL中的
MAX()
聚合函数的工作方式(请参见此处:) MAX函数仅获取单个列中的最大值

要在这里实现所需的功能,必须将三个值合并到一列中。可以使用
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

甲骨文拥有做同样事情的功能。有些时候,我在SQLServer中编写了一个类似的版本,它是可用的。看一看,我认为这会达到目的。

使用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

您希望在结果记录集的第一列中得到什么?但看起来您已经知道它将是一个空字符串。@Igor更新代码段“它不工作”是如何表现出来的?@Igor我只是想通过代码段传达我的意图。代码段不起作用。