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

Откуда:
Сообщений: 261
Доброе утро.
Ребят, у меня проблемка и я не знаю с какой стороны к ней подобраться.
Есть у меня выборка, которая показывает какие данные загружены в базу данных.
В моем случае, это данные геофизического каротажа, то есть ИМЯ СКВАЖИНЫ, ГАММА, ВЫЗВ.ПОЛЯРИЗАЦИЯ, КАЖ.СОПРОТИВЛЕНИЕ и т.д.
Вот такие столбцы. Если эти значения есть в базе, то "да", если пусто, то "нет". Но тут вдруг всплыло, что иногда замеры начинали с середины скважины, то есть до 50м, к примеру гамма не замеряли, а от 50 до 100 измерили, а потом снова не замеряли, вот и получается, что он мне по 3-4 раза одну скважину рисует. А мне надо, чтобы "если хоть где-то по скважине есть "да", то он на всю скважину ставил "да" и глубины меня не интересуют.
Пыталась использовать
case row_number() over(partition by...
но не вышло
Помогите идеями, пожалуйста. В какую сторону смотреть?

+
Select distinct top 100 PROJECTCODE,HOLEID
,case when [AR_Om_m] is null THEN 'r'
   ELSE 'a' END [AR_Om_m]
,case when [GR_K_cps] is null THEN 'r'
   ELSE 'a' END [GR_K_cps]
,case when [GR_mkRph] is null THEN 'r'
   ELSE 'a' END [GR_mkRph]
   ,case when [GR_U_cps] is null THEN 'r'
   ELSE 'a' END [GR_U_cps]
,case when [MS_10ppm_u_SI] is null THEN 'r'
   ELSE 'a' END [MS_10ppm_u_SI]
,case when [IC_mSipm] is null THEN 'r'
   ELSE 'a' END [IC_mSipm]
   ,case when [GR_Th_cps] is null THEN 'r'
   ELSE 'a' END [GR_Th_cps]
,case when [GR_Tc_cps] is null THEN 'r'
   ELSE 'a' END [GR_Tc_cps]
,case when [H_nTl] is null THEN 'r'
   ELSE 'a' END [H_nTl]
   ,case when [NP_mV] is null THEN 'r'
   ELSE 'a' END [NP_mV]
,case when [IP_2_pct] is null THEN 'r'
   ELSE 'a' END [IP_2_pct]
,case when [IP_16_pct] is null THEN 'r'
   ELSE 'a' END [IP_16_pct]
   ,case when [IP_10_pct] is null THEN 'r'
   ELSE 'a' END [IP_10_pct]
,case when [IP_04_pct] is null THEN 'r'
   ELSE 'a' END [IP_04_pct]
,case when [I_ab_mA] is null THEN 'r'
   ELSE 'a' END [I_ab_mA]
   ,case when [R_Om] is null THEN 'r'
   ELSE 'a' END [R_Om]
,case when [GR_Tc_cps] is null THEN 'r'
   ELSE 'a' END [GR_Tc_cps]
,case when [T_res_C_ddeg] is null THEN 'r'
   ELSE 'a' END [T_res_C_ddeg]
   ,case when [MS_cor_mSi] is null THEN 'r'
   ELSE 'a' END [MS_cor_mSi] 
   ,case when [Spd_mph] is null THEN 'r'
   ELSE 'a' END [Spd_mph]
,case when [SPV_mV] is null THEN 'r'
   ELSE 'a' END [SPV_mV]
   ,case when [U0] is null THEN 'r'
   ELSE 'a' END [U0]from 
(SELECT TOP 100 PERCENT * FROM (SELECT * FROM (SELECT TOP 100 PERCENT * FROM  (SELECT [HOLEID], [PROJECTCODE], [DEPTHSTEP], [RUN], [PRIORITY], [DEPTH], [AR_Om_m], [Ax_ddeg], [Az_ddeg], [Az_mag_ddeg], [Az_spline_ddeg], [Dip_ddeg]
, [Dip_spline_ddeg], [DISTC], [GR_K_cps], [GR_mkRph], [GR_Tc_cps], [GR_Th_cps], [GR_U_cps], [H_nTl], [I_ab_mA], [I_SO_mA], [IC_mSipm], [IP_04_pct], [IP_10_pct], [IP_16_pct], [IP_2_pct], [IP_pct], [MAPO], [Mask], [MS_10ppm_u_SI]
, [MS_cor_mSi], [MS_spline_10ppm_u_SI], [NP_mV], [R_Om], [Spd_mph], [SPV_mV], [T_barrel_C_ddeg], [T_res_C_ddeg], [T_water_C_ddeg], [Time_s], [U0], [Volatge_cV], [Z_nTl] 
FROM (SELECT 
[HOLEID]
,[PROJECTCODE]
,[DEPTHSTEP]
,[RUN]
,[PRIORITY]
,[DEPTH]
,[AR_Om_m]
,[Ax_ddeg]
,[Az_ddeg]
,[Az_mag_ddeg]
,[Az_spline_ddeg]
,[Dip_ddeg]
,[Dip_spline_ddeg]
,[DISTC]
,[GR_K_cps]
,[GR_mkRph]
,[GR_Tc_cps]
,[GR_Th_cps]
,[GR_U_cps]
,[H_nTl]
,[I_ab_mA]
,[I_SO_mA]
,[IC_mSipm]
,[IP_04_pct]
,[IP_10_pct]
,[IP_16_pct]
,[IP_2_pct]
,[IP_pct]
,[MAPO]
,[Mask]
,[MS_10ppm_u_SI]
,[MS_cor_mSi]
,[MS_spline_10ppm_u_SI]
,[NP_mV]
,[R_Om]
,[Spd_mph]
,[SPV_mV]
,[T_barrel_C_ddeg]
,[T_res_C_ddeg]
,[T_water_C_ddeg]
,[Time_s]
,[U0]
,[Volatge_cV]
,[Z_nTl]
FROM [GEOPHYSHEADER] a 
INNER JOIN 
  (SELECT PROJECTCODE PROJECTCODE_WSF, HOLEID HOLEID_WSF, HOLETYPE FROM (SELECT * FROM [HOLELOCATION]) AS [CollarWSF]) b
ON a.HOLEID = b.HOLEID_WSF 
AND a.PROJECTCODE = b.PROJECTCODE_WSF 
AND b.HOLETYPE = 'DRILLHOLE' 
INNER JOIN 
  (SELECT GEOPHYSGID 
         ,DEPTH 
         ,min(CASE when NAME = 'AR_Om_m' then VALUE ELSE NULL END) as [AR_Om_m]
         ,min(CASE when NAME = 'Ax_ddeg' then VALUE ELSE NULL END) as [Ax_ddeg]
         ,min(CASE when NAME = 'Az_ddeg' then VALUE ELSE NULL END) as [Az_ddeg]
         ,min(CASE when NAME = 'Az_mag_ddeg' then VALUE ELSE NULL END) as [Az_mag_ddeg]
         ,min(CASE when NAME = 'Az_spline_ddeg' then VALUE ELSE NULL END) as [Az_spline_ddeg]
         ,min(CASE when NAME = 'Dip_ddeg' then VALUE ELSE NULL END) as [Dip_ddeg]
         ,min(CASE when NAME = 'Dip_spline_ddeg' then VALUE ELSE NULL END) as [Dip_spline_ddeg]
         ,min(CASE when NAME = 'DISTC' then VALUE ELSE NULL END) as [DISTC]
         ,min(CASE when NAME = 'GR_K_cps' then VALUE ELSE NULL END) as [GR_K_cps]
         ,min(CASE when NAME = 'GR_mkRph' then VALUE ELSE NULL END) as [GR_mkRph]
         ,min(CASE when NAME = 'GR_Tc_cps' then VALUE ELSE NULL END) as [GR_Tc_cps]
         ,min(CASE when NAME = 'GR_Th_cps' then VALUE ELSE NULL END) as [GR_Th_cps]
         ,min(CASE when NAME = 'GR_U_cps' then VALUE ELSE NULL END) as [GR_U_cps]
         ,min(CASE when NAME = 'H_nTl' then VALUE ELSE NULL END) as [H_nTl]
         ,min(CASE when NAME = 'I_ab_mA' then VALUE ELSE NULL END) as [I_ab_mA]
         ,min(CASE when NAME = 'I_SO_mA' then VALUE ELSE NULL END) as [I_SO_mA]
         ,min(CASE when NAME = 'IC_mSipm' then VALUE ELSE NULL END) as [IC_mSipm]
         ,min(CASE when NAME = 'IP_04_pct' then VALUE ELSE NULL END) as [IP_04_pct]
         ,min(CASE when NAME = 'IP_10_pct' then VALUE ELSE NULL END) as [IP_10_pct]
         ,min(CASE when NAME = 'IP_16_pct' then VALUE ELSE NULL END) as [IP_16_pct]
         ,min(CASE when NAME = 'IP_2_pct' then VALUE ELSE NULL END) as [IP_2_pct]
         ,min(CASE when NAME = 'IP_pct' then VALUE ELSE NULL END) as [IP_pct]
         ,min(CASE when NAME = 'MAPO' then VALUE ELSE NULL END) as [MAPO]
         ,min(CASE when NAME = 'Mask' then VALUE ELSE NULL END) as [Mask]
         ,min(CASE when NAME = 'MS_10ppm_u_SI' then VALUE ELSE NULL END) as [MS_10ppm_u_SI]
         ,min(CASE when NAME = 'MS_cor_mSi' then VALUE ELSE NULL END) as [MS_cor_mSi]
         ,min(CASE when NAME = 'MS_spline_10ppm_u_SI' then VALUE ELSE NULL END) as [MS_spline_10ppm_u_SI]
         ,min(CASE when NAME = 'NP_mV' then VALUE ELSE NULL END) as [NP_mV]
         ,min(CASE when NAME = 'R_Om' then VALUE ELSE NULL END) as [R_Om]
         ,min(CASE when NAME = 'Spd_mph' then VALUE ELSE NULL END) as [Spd_mph]
         ,min(CASE when NAME = 'SPV_mV' then VALUE ELSE NULL END) as [SPV_mV]
         ,min(CASE when NAME = 'T_barrel_C_ddeg' then VALUE ELSE NULL END) as [T_barrel_C_ddeg]
         ,min(CASE when NAME = 'T_res_C_ddeg' then VALUE ELSE NULL END) as [T_res_C_ddeg]
         ,min(CASE when NAME = 'T_water_C_ddeg' then VALUE ELSE NULL END) as [T_water_C_ddeg]
         ,min(CASE when NAME = 'Time_s' then VALUE ELSE NULL END) as [Time_s]
         ,min(CASE when NAME = 'U0' then VALUE ELSE NULL END) as [U0]
         ,min(CASE when NAME = 'Volatge_cV' then VALUE ELSE NULL END) as [Volatge_cV]
         ,min(CASE when NAME = 'Z_nTl' then VALUE ELSE NULL END) as [Z_nTl]
   FROM 
     (SELECT GEOPHYSGID,DEPTH,NAME,VALUE FROM GEOPHYSDETAILS WHERE PROPERTYID=0) z
      WHERE NAME IN
        (' '
                 ,'AR_Om_m' 
                 ,'Ax_ddeg' 
                 ,'Az_ddeg' 
                 ,'Az_mag_ddeg' 
                 ,'Az_spline_ddeg' 
                 ,'Dip_ddeg' 
                 ,'Dip_spline_ddeg' 
                 ,'DISTC' 
                 ,'GR_K_cps' 
                 ,'GR_mkRph' 
                 ,'GR_Tc_cps' 
                 ,'GR_Th_cps' 
                 ,'GR_U_cps' 
                 ,'H_nTl' 
                 ,'I_ab_mA' 
                 ,'I_SO_mA' 
                 ,'IC_mSipm' 
                 ,'IP_04_pct' 
                 ,'IP_10_pct' 
                 ,'IP_16_pct' 
                 ,'IP_2_pct' 
                 ,'IP_pct' 
                 ,'MAPO' 
                 ,'Mask' 
                 ,'MS_10ppm_u_SI' 
                 ,'MS_cor_mSi' 
                 ,'MS_spline_10ppm_u_SI' 
                 ,'NP_mV' 
                 ,'R_Om' 
                 ,'Spd_mph' 
                 ,'SPV_mV' 
                 ,'T_barrel_C_ddeg' 
                 ,'T_res_C_ddeg' 
                 ,'T_water_C_ddeg' 
                 ,'Time_s' 
                 ,'U0' 
                 ,'Volatge_cV' 
                 ,'Z_nTl' 
        ) 
      GROUP BY GEOPHYSGID,DEPTH) c 
ON a.GEOPHYSGID = c.GEOPHYSGID) [TMPVIEW11] WHERE ([TMPVIEW11].[AR_Om_m] IS NOT NULL OR [TMPVIEW11].[Ax_ddeg] IS NOT NULL OR [TMPVIEW11].[Az_ddeg] IS NOT NULL OR [TMPVIEW11].[Az_mag_ddeg] IS NOT NULL 
OR [TMPVIEW11].[Az_spline_ddeg] IS NOT NULL OR [TMPVIEW11].[Dip_ddeg] IS NOT NULL OR [TMPVIEW11].[Dip_spline_ddeg] IS NOT NULL OR [TMPVIEW11].[DISTC] IS NOT NULL OR [TMPVIEW11].[GR_K_cps] IS NOT NULL OR [TMPVIEW11].[GR_mkRph] IS NOT NULL 
OR [TMPVIEW11].[GR_Tc_cps] IS NOT NULL OR [TMPVIEW11].[GR_Th_cps] IS NOT NULL OR [TMPVIEW11].[GR_U_cps] IS NOT NULL OR [TMPVIEW11].[H_nTl] IS NOT NULL OR [TMPVIEW11].[I_ab_mA] IS NOT NULL OR [TMPVIEW11].[I_SO_mA] IS NOT NULL
 OR [TMPVIEW11].[IC_mSipm] IS NOT NULL OR [TMPVIEW11].[IP_04_pct] IS NOT NULL OR [TMPVIEW11].[IP_10_pct] IS NOT NULL OR [TMPVIEW11].[IP_16_pct] IS NOT NULL OR [TMPVIEW11].[IP_2_pct] IS NOT NULL OR [TMPVIEW11].[IP_pct] IS NOT NULL 
 OR [TMPVIEW11].[MAPO] IS NOT NULL OR [TMPVIEW11].[Mask] IS NOT NULL OR [TMPVIEW11].[MS_10ppm_u_SI] IS NOT NULL OR [TMPVIEW11].[MS_cor_mSi] IS NOT NULL OR [TMPVIEW11].[MS_spline_10ppm_u_SI] IS NOT NULL OR [TMPVIEW11].[NP_mV] IS NOT NULL 
 OR [TMPVIEW11].[R_Om] IS NOT NULL OR [TMPVIEW11].[Spd_mph] IS NOT NULL OR [TMPVIEW11].[SPV_mV] IS NOT NULL OR [TMPVIEW11].[T_barrel_C_ddeg] IS NOT NULL OR [TMPVIEW11].[T_res_C_ddeg] IS NOT NULL OR [TMPVIEW11].[T_water_C_ddeg] IS NOT NULL
  OR [TMPVIEW11].[Time_s] IS NOT NULL OR [TMPVIEW11].[U0] IS NOT NULL OR [TMPVIEW11].[Volatge_cV] IS NOT NULL OR [TMPVIEW11].[Z_nTl] IS NOT NULL) ) AS [ACQCONVERT] ) AS [TMPVIEW11]) [TMPSQLSHEETVIEW])gdt





Кажется у меня кривые руки...

К сообщению приложен файл. Размер - 87Kb
16 май 18, 07:38    [21412244]     Ответить | Цитировать Сообщить модератору
 Re: Как бы объяснить SQL чтобы при наличии хоть одного "да", он ставил "да"!  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20223
А Вы просто получите MIN([Поле с да/нет]) OVER (PARTITION BY [Скважина])). Если есть хотя бы одно "да" - то и получите "да", иначе получите "нет". Ну или там MAX(CASE [Поле с да/нет] WHEN "да" THEN 1 ELSE 0 END) OVER (PARTITION BY [Скважина])). От него и пляшите.
16 май 18, 07:45    [21412261]     Ответить | Цитировать Сообщить модератору
 Re: Как бы объяснить SQL чтобы при наличии хоть одного "да", он ставил "да"!  [new]
katish444
Member

Откуда:
Сообщений: 261
спасибо большое за идею, сейчас попробую
Akina,
16 май 18, 09:07    [21412366]     Ответить | Цитировать Сообщить модератору
 Re: Как бы объяснить SQL чтобы при наличии хоть одного "да", он ставил "да"!  [new]
katish444
Member

Откуда:
Сообщений: 261
Akina, блин, никак не выходит, еще больше дублировать стало...
16 май 18, 11:03    [21412631]     Ответить | Цитировать Сообщить модератору
 Re: Как бы объяснить SQL чтобы при наличии хоть одного "да", он ставил "да"!  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20223
katish444
еще больше дублировать стало
Да быть не может! как может увеличиться количество записей???
А идея вполне себе работает, см. http://www.sqlfiddle.com/#!18/a74f3/1
16 май 18, 11:44    [21412773]     Ответить | Цитировать Сообщить модератору
 Re: Как бы объяснить SQL чтобы при наличии хоть одного "да", он ставил "да"!  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30829
katish444
Akina, блин, никак не выходит, еще больше дублировать стало...
У вас ошибка в коде.
16 май 18, 21:20    [21414884]     Ответить | Цитировать Сообщить модератору
 Re: Как бы объяснить SQL чтобы при наличии хоть одного "да", он ставил "да"!  [new]
katish444
Member

Откуда:
Сообщений: 261
alexeyvg,
не могли бы вы указать на ошибку, пожалуйста. Не могу ее найти
17 май 18, 08:41    [21415626]     Ответить | Цитировать Сообщить модератору
 Re: Как бы объяснить SQL чтобы при наличии хоть одного "да", он ставил "да"!  [new]
katish444
Member

Откуда:
Сообщений: 261
Akina, ого, какой клевый сайт. Даже не знала что так можно. Спасибо! Буду свои скрипты тестить
17 май 18, 08:43    [21415632]     Ответить | Цитировать Сообщить модератору
 Re: Как бы объяснить SQL чтобы при наличии хоть одного "да", он ставил "да"!  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30829
katish444
alexeyvg,
не могли бы вы указать на ошибку, пожалуйста. Не могу ее найти
Вы бы код свой показали, как можно найти ошибку в запросе, не видя запроса???
17 май 18, 17:45    [21418077]     Ответить | Цитировать Сообщить модератору
 Re: Как бы объяснить SQL чтобы при наличии хоть одного "да", он ставил "да"!  [new]
982183
Member

Откуда: VL
Сообщений: 3350
Действительно, http://www.sqlfiddle.com очень интересная штука для определенных вещей.
Спасибо .
18 май 18, 02:41    [21419200]     Ответить | Цитировать Сообщить модератору
 Re: Как бы объяснить SQL чтобы при наличии хоть одного "да", он ставил "да"!  [new]
982183
Member

Откуда: VL
Сообщений: 3350
katish444
А мне надо, чтобы "если хоть где-то по скважине есть "да", то он на всю скважину ставил "да" и глубины меня не интересуют.

Ну так делайте промежуточную таблицу "Скважина", "да/нет"
И потом обновите основную таблицу данными из неё.
18 май 18, 04:02    [21419207]     Ответить | Цитировать Сообщить модератору
 Re: Как бы объяснить SQL чтобы при наличии хоть одного "да", он ставил "да"!  [new]
982183
Member

Откуда: VL
Сообщений: 3350
Сорри, собственно говоря примерно это же было предложено и ранее.
Другое дело, что проблема "дублирования" это не вопрос да/нет, а проблема группировки
после которой надо уже реализовывать агрегатные функции.
Или "дублирование у вас, это не "наличие нескольких строк по одному ID",
а "наличие разных признаков у строк с одним ID"?

Хотя если " глубины меня не интересуют", то группировка должна быть по скважине, чего сейчас нет.
18 май 18, 04:38    [21419215]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить