SQL Server, найти кросс-значение в разных столбцах - PullRequest
0 голосов
/ 19 декабря 2018

Мне нужно помочь для запроса сервера SQL.У меня много строк, подобных этой, и в моей таблице 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

Извините за мой плохой английский, спасибо за ответы ...

Редактировать: ответы не работают.Я перепробовал их все.У вас есть идея для этого решения, ребята?

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Если есть несопоставленные строки или «пары», то:

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

дБ<> скрипка здесь

0 голосов
/ 19 декабря 2018

Вот способ сделать это

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
...