如何在SQL Server中将两行合并为一行

如何在SQL Server中将两行合并为一行,sql,sql-server,Sql,Sql Server,我正在尝试编写一个SQL查询,其思想是将两行合并为一行。 表演时 select * from caixa 我得到以下结果: id money open closed fun type situation -------------------------------------------------------------------- 13 10 08/09/2018 18:55

我正在尝试编写一个SQL查询,其思想是将两行合并为一行。 表演时

select * from caixa
我得到以下结果:

id   money    open                closed        fun  type  situation
--------------------------------------------------------------------
13    10      08/09/2018 18:55                   1    E     1
37    -473                  09/09/2018 17:01     1    F     1
40    0       09/09/2018 17:08                   1    E     2
41    0                     10/09/2018 17:09     1    F     2
其想法是在情况相同的情况下将两行连接起来 例如:

money     open                   closed        fun  type  situation
--------------------------------------------------------------------
-473      08/09/2018 18:55  09/09/2018 17:01    1    E      1

您可以尝试使用聚合函数来实现它

SELECT MIN(money) as money ,MAX(open) as open,
       MAX(closed) as closed,fun,MIN(type) as type,
       MIN(situation) as situation
FROM caixa
GROUP BY fun

试着把桌子和它自己连接起来

SELECT O.money as open_money, C.money as closed_money,
       O.open as open, C.closed as closed,
       O.fun as open_fun, C.fun as closed_fun,
       O.type as open_type, C.type as closed_type
FROM caixa O, caixa C
WHERE O.id <> C.id 
AND O.situation = C.situation
AND O.open IS NOT NULL 
AND C.closed IS NOT NULL
选择O.money作为开放式货币,选择C.money作为封闭式货币,
O.打开为打开,C.关闭为关闭,
O.fun为开放式,C.fun为封闭式,
O型为开放型,C型为封闭型
来自caixa O,caixa C
O.id C.id在哪里
O.情况=C.情况
并且O.open不是空的
C.closed不为空

这甚至有效,但我不想将日期与max进行比较,如果它不同于empty,我必须做些什么才能得到它?如果有许多不同的日期,您想做什么
MAX
可以过滤空字符串或
NULL
然后获取值您需要指定如何在按
情况
分组时聚合其他列(
money
fun
type
)。是否有多行具有相同的
情况
值?