Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Соединить 5 таблиц по ключу и с distinct  [new]
katish444
Member

Откуда:
Сообщений: 261
Уважаемые форумчани. Пытаюсь сделать сводную таблицу, но у меня не выходит. Есть таблицы с данными

create table HOLECOORD (holeid varchar(255), projectcodevarchar(255), coordinatesetvarchar(255), x int,y int,z int)
create table HOLEDETAILS (holeid varchar(255), projectcode varchar(255), name varchar(255), value varchar(255))
create table DRILLHOLEDIAMDETAILS (holeid varchar(255), projectcode varchar(255), name varchar(255), value varchar(255))
create table HOLESURVEY (holeid varchar(255), projectcode varchar(255), depth int, azimuth decimal(20,5), dip decimal(20,5), azimuthGridName varchar(255))
create table DRILLINGDETAIL (drillingdate varchar(255), shift varchar(255), holeid varchar(255), projectcode varchar(255), name varchar(255), value varchar(255))

insert into HOLECOORD (holeid, projectcode, coordinateset, x,y,z) values ('UZSE-17-001', 'UZ', 'WGS84_Zone_43N_Plan', 100,200,300)
insert into HOLEDETAILS (holeid, projectcode, name, value) values ('UZSE-17-001', 'UZ', 'Drill_Date_Start', '26-oct-2017')
insert into HOLEDETAILS (holeid, projectcode, name, value) values ('UZSE-17-001', 'UZ', 'Depth_Project', '100')
insert into DRILLHOLEDIAMDETAILS (holeid, projectcode, name, value) values ('UZSE-17-001', 'UZ', 'DrillRigModel', 'LF90')
insert into HOLESURVEY (holeid, projectcode, depth, azimuth, dip, azimuthGridName) values ('UZSE-17-001', 'UZ',0,20,90,'AZ')
insert into HOLESURVEY (holeid, projectcode, depth, azimuth, dip, azimuthGridName) values ('UZSE-17-001', 'UZ',20,40,60,'AZ')
insert into DRILLINGDETAIL (drillingdate, shift, holeid, projectcode, name, value) values ('27-oct-2017','day','UZSE-17-001',
'UZ',DrillDepth','20')

Необходимо создать запрос, у меня не отображает Azimuth Dip

select distinct h.holeID, hcd.X, hcd.Y,s.AZIMUTH, s.DIP, h.projectcode,dd.DRILLINGDATE,
max(case when dr.name = 'DrillRigModel' then dr.Value end) as DrillRigModel,
max(case when hd.name = 'Depth_Project' then hd.Value END) as Depth_Project,
max(case when hd.name = 'Drill_Date_Start' then hd.Value END)as Drill_Date_Start
from HOLEDETAILS hd left join
DRILLHOLEDIAMDETAILS dr on dr.HOLEID=hd.HOLEID left join holelocation h on h.HOLEID=hd.HOLEID
left join ( select distinct hs1.Holeid, hs1.Depth, hs1.AZIMUTH, hs1.DIP from HOLESURVEY hs1 inner join
(select distinct hs2.Holeid, min(hs2.Depth)D from HOLESURVEY hs2 group by hs2.Holeid)hs on hs.Holeid=hs1.Holeid and hs.D=hs1.Depth group by hs.Holeid, hs1.Holeid, hs1.Depth, hs1.AZIMUTH, hs1.DIP)s on h.HOLEID=s.HOLEID
left join DRILLINGDETAIL dd on dd.holeid=hd.HOLEID
left join (select holeid, projectcode, round(x,2)X ,round(y,2)Y,round(z,2)Z
from HOLECOORD where coordinateset = 'WGS84_Zone_43N_Plan')hcd on hcd.holeid=h.holeid and h.projectcode=h.projectcode
where h.projectcode = 'uz' and DRILLINGDATE = '2ct-2017'
GROUP BY
h.holeID, h.projectcode, hcd.X, hcd.Y,s.AZIMUTH, s.DIP,dd.DRILLINGDATE

Таблица должна получится как на картинке, но без Null
Помогите пожалуйста
[img=]

К сообщению приложен файл. Размер - 26Kb
19 янв 18, 10:36    [21119089]     Ответить | Цитировать Сообщить модератору
 Re: Соединить 5 таблиц по ключу и с distinct  [new]
assmsk
Member

Откуда:
Сообщений: 173
katish444
Уважаемые форумчани. Пытаюсь сделать сводную таблицу, но у меня не выходит. Есть таблицы с данными

create table HOLECOORD (holeid varchar(255), projectcodevarchar(255), coordinatesetvarchar(255), x int,y int,z int)
create table HOLEDETAILS (holeid varchar(255), projectcode varchar(255), name varchar(255), value varchar(255))
create table DRILLHOLEDIAMDETAILS (holeid varchar(255), projectcode varchar(255), name varchar(255), value varchar(255))
create table HOLESURVEY (holeid varchar(255), projectcode varchar(255), depth int, azimuth decimal(20,5), dip decimal(20,5), azimuthGridName varchar(255))
create table DRILLINGDETAIL (drillingdate varchar(255), shift varchar(255), holeid varchar(255), projectcode varchar(255), name varchar(255), value varchar(255))

DRILLHOLEDIAMDETAILS dr on dr.HOLEID=hd.HOLEID left join holelocation h on h.HOLEID=hd.HOLEID

[img=]


Что в таблице holelocation ?
19 янв 18, 10:55    [21119202]     Ответить | Цитировать Сообщить модератору
 Re: Соединить 5 таблиц по ключу и с distinct  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
katish444,
1. Все твои проблемы от того, что код написан неряшливо - да его банально читать неудобно.
2. DISTINCT + GROUP BY - это как презерватив на свечке.
3. Словами опиши, что нужно.
4. Добавь данных. Твой запрос на тестовых данных дает не то же, что на картинке.
5. Телепатия
SELECT
  hc.[holeid],
  hc.[projectcode],
  [x] = ROUND( hc.[x], 2 ),
  [y] = ROUND( hc.[y], 2 ),
  [z] = ROUND( hc.[z], 2 ),
  ddd.[drillingdate],
  [drill_depth] = ddd.[value],
  [drill_rig_model]   = drm.[value],
  [depth_project]    = dp.[value],
  [drill_date_start]  = dds.[value],
  hs.[azimuth],
  hs.[dip]
from
  HOLECOORD hc
  INNER JOIN DRILLINGDETAIL ddd ON (
        ddd.[holeid] = hc.[holeid]
    AND ddd.[name] = 'DrillDepth' )
  LEFT JOIN HOLESURVEY hs ON (
        hs.[holeid] = hc.[holeid]
    AND hs.[depth] = CONVERT( INT, ddd.[value] ) )
  LEFT JOIN DRILLHOLEDIAMDETAILS drm ON (
        drm.[holeid] = hc.[holeid]
    AND drm.[name] = 'DrillRigModel' )
  LEFT JOIN HOLEDETAILS dp ON (
        dp.[holeid] = hc.[holeid]
    AND dp.[name] = 'Depth_Project' )
  LEFT JOIN HOLEDETAILS dds ON (
        dds.[holeid] = hc.[holeid]
    AND dds.[name] = 'Drill_Date_Start' )
WHERE
      hc.[projectcode] = 'UZ'
19 янв 18, 11:20    [21119332]     Ответить | Цитировать Сообщить модератору
 Re: Соединить 5 таблиц по ключу и с distinct  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3708
Чтобы ускорить получение ответа в форуме нужно создать две одинаковые темы с немного изменным названием

https://www.sql.ru/forum/1282930/ne-vyvodit-sushhestvuushhie-znacheniya
19 янв 18, 11:34    [21119412]     Ответить | Цитировать Сообщить модератору
 Re: Соединить 5 таблиц по ключу и с distinct  [new]
Добрый Э - Эх
Guest
Ролг Хупин,

поверь, их далеко не две.... история про дырки и их бурении уже не первую неделю тут развивается...
19 янв 18, 11:46    [21119484]     Ответить | Цитировать Сообщить модератору
 Re: Соединить 5 таблиц по ключу и с distinct  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Добрый Э - Эх
Ролг Хупин,
поверь, их далеко не две.... история про дырки и их бурении уже не первую неделю тут развивается...

Не дырки, а скважины... и не развиваются, а углубляются :)
19 янв 18, 12:00    [21119565]     Ответить | Цитировать Сообщить модератору
 Re: Соединить 5 таблиц по ключу и с distinct  [new]
Добрый Э - Эх
Guest
Руслан Дамирович,

таки дырки... если я правильно понимаю основное значение английского слова "HOLE"
скважины, в геологическом смысле, это, наверное, "WELL" должно было быть...
19 янв 18, 12:19    [21119685]     Ответить | Цитировать Сообщить модератору
 Re: Соединить 5 таблиц по ключу и с distinct  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Добрый Э - Эх
Руслан Дамирович,

таки дырки... если я правильно понимаю основное значение английского слова "HOLE"
скважины, в геологическом смысле, это, наверное, "WELL" должно было быть...

ИМО
Прежде чем качать золото из OIL WELL, нужно сначала найти OIL DEPOSIT, а затем DRILL A HOLE TO THE DEPOSIT.
Как говорил мой учитель труда, показывая на дыру в заготовке - "Дырка - в заднице, а это - отверстие". В смысле есть термин "скважина" относительно бурения - его и нужно применять. А "колодец" - это уже когда скважину пробурили и укрепили стенки.

Но мы уходим в жесткий оффтопик :)
19 янв 18, 12:33    [21119735]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить