SQL 服务器,在不同列中查找交叉值
SQL Server, find cross value in different columns
我需要帮助 sql 服务器查询。我有很多这样的行,我的 table 有 3 列,例如 a、b、c。
a b c
--- --- ---
hello world 10
hey you 80
world hello 20
my day 15
merhaba dunya 40
bugun nasilsin 75
dunya merhaba 20
所以我想在不同的列中找到交叉值,并添加 c 列值。所以在查询之后我想看到那个;
a b c
--- --- ---
hello world 30
hey you 80
my day 15
merhaba dunya 60
bugun nasilsin 75
抱歉我的英语不好,谢谢你的回答...
编辑:答案无效。我都试过了。伙计们,你们对这个解决方案有什么想法吗?
这是一种方法
create table t(a varchar(10), b varchar(10), c varchar(10))
insert into t values('hello','world',10)
insert into t values('world','hello',20)
select min(a) as a
,max(b) as b
,sum(cast(c as int)) as c
from t as x
group by case when a>b then a
else b
end
如果有不匹配的行,或者 "pairs" ,那么:
CREATE TABLE mytable(
a VARCHAR(50) NOT NULL
,b VARCHAR(50) NOT NULL
,c INTEGER NOT NULL
);
INSERT INTO mytable(a,b,c) VALUES ('hello','world',10);
INSERT INTO mytable(a,b,c) VALUES ('hey','you',80);
INSERT INTO mytable(a,b,c) VALUES ('world','hello',20);
INSERT INTO mytable(a,b,c) VALUES ('my','day',15);
INSERT INTO mytable(a,b,c) VALUES ('merhaba','dunya',40);
INSERT INTO mytable(a,b,c) VALUES ('bugun','nasilsin',75);
INSERT INTO mytable(a,b,c) VALUES ('dunya','merhaba',20);
GO
7 rows affected
select t.a, t.b, sum(t.c + coalesce(t2.c,0))
from mytable t
left join mytable t2 on t.a = t2.b and t.b = t2.a
group by t.a, t.b
GO
a | b | (No column name)
:------ | :------- | ---------------:
my | day | 15
merhaba | dunya | 60
world | hello | 30
dunya | merhaba | 60
bugun | nasilsin | 75
hello | world | 30
hey | you | 80
db<>fiddle here
我需要帮助 sql 服务器查询。我有很多这样的行,我的 table 有 3 列,例如 a、b、c。
a b c
--- --- ---
hello world 10
hey you 80
world hello 20
my day 15
merhaba dunya 40
bugun nasilsin 75
dunya merhaba 20
所以我想在不同的列中找到交叉值,并添加 c 列值。所以在查询之后我想看到那个;
a b c
--- --- ---
hello world 30
hey you 80
my day 15
merhaba dunya 60
bugun nasilsin 75
抱歉我的英语不好,谢谢你的回答...
编辑:答案无效。我都试过了。伙计们,你们对这个解决方案有什么想法吗?
这是一种方法
create table t(a varchar(10), b varchar(10), c varchar(10))
insert into t values('hello','world',10)
insert into t values('world','hello',20)
select min(a) as a
,max(b) as b
,sum(cast(c as int)) as c
from t as x
group by case when a>b then a
else b
end
如果有不匹配的行,或者 "pairs" ,那么:
CREATE TABLE mytable( a VARCHAR(50) NOT NULL ,b VARCHAR(50) NOT NULL ,c INTEGER NOT NULL ); INSERT INTO mytable(a,b,c) VALUES ('hello','world',10); INSERT INTO mytable(a,b,c) VALUES ('hey','you',80); INSERT INTO mytable(a,b,c) VALUES ('world','hello',20); INSERT INTO mytable(a,b,c) VALUES ('my','day',15); INSERT INTO mytable(a,b,c) VALUES ('merhaba','dunya',40); INSERT INTO mytable(a,b,c) VALUES ('bugun','nasilsin',75); INSERT INTO mytable(a,b,c) VALUES ('dunya','merhaba',20); GO
7 rows affected
select t.a, t.b, sum(t.c + coalesce(t2.c,0)) from mytable t left join mytable t2 on t.a = t2.b and t.b = t2.a group by t.a, t.b GO
a | b | (No column name) :------ | :------- | ---------------: my | day | 15 merhaba | dunya | 60 world | hello | 30 dunya | merhaba | 60 bugun | nasilsin | 75 hello | world | 30 hey | you | 80
db<>fiddle here