Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как "поднять" столбцы в ряд? / 11 сообщений из 11, страница 1 из 1
24.08.2018, 13:16
    #39692959
katish444
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "поднять" столбцы в ряд?
Добрый день.
Подскажите, пожалуйста, как избежать пустых ячеек и поднять текст в строку. Ведь интервал один и тот же, а он берет и дублирует.
Вот таблица
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
declare  @geodetail  table (holeid varchar(255),projectcode varchar(255),[value] varchar(255), name varchar(20))
insert into @geodetail  (holeid,projectcode ,[value] , name) values ('UZ-001','uz', 'Alteration','HH')
insert into @geodetail  (holeid,projectcode ,  [value] , name) values ('UZ-001','uz', 'Alteration2','GT')
insert into @geodetail  (holeid,projectcode ,  [value] , name) values ('UZ-001','uz', 'Alt_inten','JH')
insert into @geodetail  (holeid,projectcode ,  [value] , name) values ('UZ-001','uz', 'Alt_inten2','OO')
insert into @geodetail  (holeid,projectcode ,  [value] , name) values ('UZ-001','uz', 'Alt_occur','DR')
insert into @geodetail  (holeid,projectcode ,  [value] , name) values ('UZ-001','uz', 'Alt_occur2','UU')
insert into @geodetail  (holeid,projectcode ,  [value] , name) values ('UZ-001','uz', 'Alteration3','GTRR')


Вот скрипт
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
select * from (

SELECT [HOLEID], 
       [PROJECTCODE], 
       [GEOLFROM], 
       [GEOLTO], 
       (CASE
            WHEN name LIKE 'Alteration%'
            THEN value
        END) A, 
       (CASE
            WHEN name LIKE 'Alt_inten%'
            THEN value
        END) I, 
       (CASE
            WHEN name LIKE 'Alt_occu%'
            THEN value
        END) O
FROM GEODETAILS
WHERE PROJECTCODE = 'dz')f where (a is not null or i is not null or o is not null) 
group by [HOLEID], 
       [PROJECTCODE], 
       [GEOLFROM], 
       [GEOLTO],a,i,o



Что я делаю не так? почему они разделяются и как это исправить?
За ранее, спасибо
...
Рейтинг: 0 / 0
24.08.2018, 13:19
    #39692961
Посетитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "поднять" столбцы в ряд?
katish444,

уберите
a,i,o из группировки и оберните кейсы в max, например
...
Рейтинг: 0 / 0
24.08.2018, 13:27
    #39692967
katish444
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "поднять" столбцы в ряд?
Посетитель, точно! спасибо большое
...
Рейтинг: 0 / 0
25.08.2018, 06:25
    #39693194
katish444
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "поднять" столбцы в ряд?
Посетитель, я немного рано обрадовалась. При использовании min или max он выдает только одно значение.
А мне необходимо, чтобы все столбца Alt1 Alt2 Alt3 собирались в единый столбец.
Вот такие у меня сейчас поля, нужно чтобы А1 и А2 и А3 были в одном столбце, и все равно что интервалы будут дублироваться
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
--select holeid, geolfrom [From], geolto [To], (concat(A,(case when m is not null then '('+m+')' else '' end)))Alt_Min
SELECT *
FROM
(
    SELECT [HOLEID], 
           [PROJECTCODE], 
           [GEOLFROM], 
           [GEOLTO], 
           MIN(CASE
                   WHEN name LIKE 'alt1_Min' --or name LIKE 'alt2_Min' or name LIKE 'alt3_Min'
                   THEN value
               END) A, 
           MIN(CASE
                   WHEN name LIKE 'alt1_Morphology' --or name LIKE 'alt1_Morphology' or name LIKE 'alt1_Morphology'
                   THEN value
               END) M, 
           MIN(CASE
                   WHEN name LIKE 'alt2_Min'
                   THEN value
               END) A2, 
           MIN(CASE
                   WHEN name LIKE 'alt2_Morphology'
                   THEN value
               END) M2, 
           MIN(CASE
                   WHEN name LIKE 'alt3_Min'
                   THEN value
               END) A3, 
           MIN(CASE
                   WHEN name LIKE 'alt3_Morphology'
                   THEN value
               END) M3
    FROM GEODETAILS
    WHERE PROJECTCODE = 'dz'
    GROUP BY [HOLEID], 
             [PROJECTCODE], 
             [GEOLFROM], --name,value,
             [GEOLTO]
) f
WHERE(a IS NOT NULL
      OR m IS NOT NULL);
...
Рейтинг: 0 / 0
25.08.2018, 06:34
    #39693195
katish444
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "поднять" столбцы в ряд?
Есть же union!
Как я про него забыла
...
Рейтинг: 0 / 0
27.08.2018, 09:28
    #39693528
Руслан Дамирович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "поднять" столбцы в ряд?
Извращения какие-то...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
DECLARE @t TABLE ( 
  [holeid] INT,
  [projectcode] VARCHAR(2),
  [geolfrom] INT,
  [geolto] INT,
  [name] VARCHAR(20),
  [value] VARCHAR(10)
)
;
INSERT INTO @t
VALUES 
  ( 1, 'DZ',  1,  5, 'alt1_Min', 'aaa' ),
  ( 1, 'DZ',  6, 15, 'alt2_Min', 'bb' ),
  ( 1, 'DZ', 18, 47, 'alt3_Min', 'aacca' ),
  ( 1, 'DZ',  1,  5, 'alt1_Morphology', 'aaa' ),
  ( 1, 'DZ',  1,  5, 'alt1_Min', 'bbb' ),
  ( 1, 'DZ',  1,  5, 'alt2_Min', 'aaa' ),
  ( 1, 'DZ',  1,  5, 'alt1_Min', 'aaa' ),
  ( 1, 'DZ',  1,  5, 'alt3_Min', 'aaa' ),
  ( 1, 'DZ',  1,  5, 'alt1_Min', 'aaa' ),
  ( 1, 'DZ',  1,  5, 'alt2_Morphology', 'aaa' ),
  ( 1, 'DZ',  1,  5, 'alt1_Min', 'aaa' ),
  ( 1, 'DZ',  1,  5, 'alt3_Morphology', 'aaa' ),
  ( 1, 'DZ',  1,  5, 'alt1_Min', 'aaa' ),
  ( 1, 'DZ',  1,  5, 'alt1_Min', 'aaa' )
;
WITH
t0 AS (
  SELECT
    *
  FROM
    @t
  WHERE
    [projectcode] = 'dz'
),
t1 AS (
  SELECT DISTINCT
    [holeid], 
    [projectcode], 
    [geolfrom], 
    [geolto]
  FROM
    t0
)
SELECT
  t1.[holeid], 
  t1.[projectcode], 
  t1.[geolfrom], 
  t1.[geolto],
  [alt_min] = STUFF( ( 
      SELECT 
        [*] = ',' + [value]
      FROM
        t0 
      WHERE
            t0.[holeid] = t1.[holeid] 
        AND t0.[projectcode] = t1.[projectcode]
        AND t0.[geolfrom] = t1.[geolfrom]
        AND t0.[geolto] = t1.[geolto]
      FOR XML PATH( '' ) 
    ), 1, 1, '' )
FROM
  t1
; 
...
Рейтинг: 0 / 0
27.08.2018, 09:31
    #39693529
Руслан Дамирович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "поднять" столбцы в ряд?
не выспался. в [alt_min] добавить условие в WHERE
Код: sql
1.
AND t0.[name] LIKE 'ALT%&_MIN' ESCAPE '&'
...
Рейтинг: 0 / 0
27.08.2018, 10:42
    #39693571
petre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "поднять" столбцы в ряд?
katish444,

Код: sql
1.
select holeid, geolfrom [From], geolto [To], isnull(A,'')+isnull(A2,'')+isnull(A3,'')
...
Рейтинг: 0 / 0
27.08.2018, 11:02
    #39693577
Владимир Затуливетер
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "поднять" столбцы в ряд?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
declare @t table
(
    holeid int
  , projectcode varchar(2)
  , geolfrom int
  , geolto int
  , name varchar(20)
  , value varchar(10)
);

insert into @t
values ( 1, 'DZ', 1, 5, 'alt1_Min', 'aaa' )
     , ( 1, 'DZ', 6, 15, 'alt2_Min', 'bb' )
     , ( 1, 'DZ', 18, 47, 'alt3_Min', 'aacca' )
     , ( 1, 'DZ', 1, 5, 'alt1_Morphology', 'aaa')
     , ( 1, 'DZ', 1, 5, 'alt1_Min', 'bbb' )
     , ( 1, 'DZ', 1, 5, 'alt2_Min', 'aaa' )
     , ( 1, 'DZ', 1, 5, 'alt1_Min', 'aaa' )
     , ( 1, 'DZ', 1, 5, 'alt3_Min', 'aaa' )
     , ( 1, 'DZ', 1, 5, 'alt1_Min', 'aaa' )
     , ( 1, 'DZ', 1, 5, 'alt2_Morphology', 'aaa')     
     , ( 1, 'DZ', 1, 5, 'alt1_Min', 'aaa' )
     , ( 1, 'DZ', 1, 5, 'alt3_Morphology', 'aaa')
     , ( 1, 'DZ', 1, 5, 'alt1_Min', 'aaa' )
     , ( 1, 'DZ', 1, 5, 'alt1_Min', 'aaa' );

select
    holeid
  , projectcode
  , geolfrom
  , geolto
  , string_agg(value, ',')
from @t
where projectcode = 'dz'
      and name like 'ALT%&_MIN' escape '&'
group by holeid
       , projectcode
       , geolfrom
       , geolto
...
Рейтинг: 0 / 0
28.08.2018, 13:43
    #39694300
katish444
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "поднять" столбцы в ряд?
Руслан Дамирович, спасибо большое
...
Рейтинг: 0 / 0
28.08.2018, 13:44
    #39694302
katish444
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "поднять" столбцы в ряд?
Владимир Затуливетер, ух тыж! теперь я знаю функцию escape! Спасибо
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как "поднять" столбцы в ряд? / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]