powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как "поднять" столбцы в ряд?
11 сообщений из 11, страница 1 из 1
Как "поднять" столбцы в ряд?
    #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
Как "поднять" столбцы в ряд?
    #39692961
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katish444,

уберите
a,i,o из группировки и оберните кейсы в max, например
...
Рейтинг: 0 / 0
Как "поднять" столбцы в ряд?
    #39692967
katish444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посетитель, точно! спасибо большое
...
Рейтинг: 0 / 0
Как "поднять" столбцы в ряд?
    #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
Как "поднять" столбцы в ряд?
    #39693195
katish444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть же union!
Как я про него забыла
...
Рейтинг: 0 / 0
Как "поднять" столбцы в ряд?
    #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
Как "поднять" столбцы в ряд?
    #39693529
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не выспался. в [alt_min] добавить условие в WHERE
Код: sql
1.
AND t0.[name] LIKE 'ALT%&_MIN' ESCAPE '&'
...
Рейтинг: 0 / 0
Как "поднять" столбцы в ряд?
    #39693571
petre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
katish444,

Код: sql
1.
select holeid, geolfrom [From], geolto [To], isnull(A,'')+isnull(A2,'')+isnull(A3,'')
...
Рейтинг: 0 / 0
Как "поднять" столбцы в ряд?
    #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
Как "поднять" столбцы в ряд?
    #39694300
katish444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Руслан Дамирович, спасибо большое
...
Рейтинг: 0 / 0
Как "поднять" столбцы в ряд?
    #39694302
katish444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир Затуливетер, ух тыж! теперь я знаю функцию escape! Спасибо
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как "поднять" столбцы в ряд?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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