Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как бы объяснить SQL чтобы при наличии хоть одного "да", он ставил "да"! / 12 сообщений из 12, страница 1 из 1
16.05.2018, 07:38
    #39645277
katish444
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы объяснить SQL чтобы при наличии хоть одного "да", он ставил "да"!
Доброе утро.
Ребят, у меня проблемка и я не знаю с какой стороны к ней подобраться.
Есть у меня выборка, которая показывает какие данные загружены в базу данных.
В моем случае, это данные геофизического каротажа, то есть ИМЯ СКВАЖИНЫ, ГАММА, ВЫЗВ.ПОЛЯРИЗАЦИЯ, КАЖ.СОПРОТИВЛЕНИЕ и т.д.
Вот такие столбцы. Если эти значения есть в базе, то "да", если пусто, то "нет". Но тут вдруг всплыло, что иногда замеры начинали с середины скважины, то есть до 50м, к примеру гамма не замеряли, а от 50 до 100 измерили, а потом снова не замеряли, вот и получается, что он мне по 3-4 раза одну скважину рисует. А мне надо, чтобы "если хоть где-то по скважине есть "да", то он на всю скважину ставил "да" и глубины меня не интересуют.
Пыталась использовать
Код: sql
1.
case row_number() over(partition by...

но не вышло
Помогите идеями, пожалуйста. В какую сторону смотреть?

Код: 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.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
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






Кажется у меня кривые руки...
...
Рейтинг: 0 / 0
16.05.2018, 07:45
    #39645281
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы объяснить SQL чтобы при наличии хоть одного "да", он ставил "да"!
А Вы просто получите MIN([Поле с да/нет]) OVER (PARTITION BY [Скважина])) . Если есть хотя бы одно "да" - то и получите "да", иначе получите "нет". Ну или там MAX(CASE [Поле с да/нет] WHEN "да" THEN 1 ELSE 0 END) OVER (PARTITION BY [Скважина])) . От него и пляшите.
...
Рейтинг: 0 / 0
16.05.2018, 09:07
    #39645304
katish444
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы объяснить SQL чтобы при наличии хоть одного "да", он ставил "да"!
спасибо большое за идею, сейчас попробую
Akina,
...
Рейтинг: 0 / 0
16.05.2018, 11:03
    #39645353
katish444
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы объяснить SQL чтобы при наличии хоть одного "да", он ставил "да"!
Akina, блин, никак не выходит, еще больше дублировать стало...
...
Рейтинг: 0 / 0
16.05.2018, 11:44
    #39645371
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы объяснить SQL чтобы при наличии хоть одного "да", он ставил "да"!
katish444еще больше дублировать сталоДа быть не может! как может увеличиться количество записей???
А идея вполне себе работает, см. http://www.sqlfiddle.com/#!18/a74f3/1
...
Рейтинг: 0 / 0
16.05.2018, 21:20
    #39645788
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы объяснить SQL чтобы при наличии хоть одного "да", он ставил "да"!
katish444Akina, блин, никак не выходит, еще больше дублировать стало...У вас ошибка в коде.
...
Рейтинг: 0 / 0
17.05.2018, 08:41
    #39645863
katish444
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы объяснить SQL чтобы при наличии хоть одного "да", он ставил "да"!
alexeyvg,
не могли бы вы указать на ошибку, пожалуйста. Не могу ее найти
...
Рейтинг: 0 / 0
17.05.2018, 08:43
    #39645864
katish444
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы объяснить SQL чтобы при наличии хоть одного "да", он ставил "да"!
Akina, ого, какой клевый сайт. Даже не знала что так можно. Спасибо! Буду свои скрипты тестить
...
Рейтинг: 0 / 0
17.05.2018, 17:45
    #39646293
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы объяснить SQL чтобы при наличии хоть одного "да", он ставил "да"!
katish444alexeyvg,
не могли бы вы указать на ошибку, пожалуйста. Не могу ее найтиВы бы код свой показали, как можно найти ошибку в запросе, не видя запроса???
...
Рейтинг: 0 / 0
18.05.2018, 02:41
    #39646450
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы объяснить SQL чтобы при наличии хоть одного "да", он ставил "да"!
Действительно, http://www.sqlfiddle.com очень интересная штука для определенных вещей.
Спасибо .
...
Рейтинг: 0 / 0
18.05.2018, 04:02
    #39646451
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы объяснить SQL чтобы при наличии хоть одного "да", он ставил "да"!
katish444А мне надо, чтобы "если хоть где-то по скважине есть "да", то он на всю скважину ставил "да" и глубины меня не интересуют.
Ну так делайте промежуточную таблицу "Скважина", "да/нет"
И потом обновите основную таблицу данными из неё.
...
Рейтинг: 0 / 0
18.05.2018, 04:38
    #39646456
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы объяснить SQL чтобы при наличии хоть одного "да", он ставил "да"!
Сорри, собственно говоря примерно это же было предложено и ранее.
Другое дело, что проблема "дублирования" это не вопрос да/нет, а проблема группировки
после которой надо уже реализовывать агрегатные функции.
Или "дублирование у вас, это не "наличие нескольких строк по одному ID",
а "наличие разных признаков у строк с одним ID"?

Хотя если " глубины меня не интересуют", то группировка должна быть по скважине, чего сейчас нет.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как бы объяснить SQL чтобы при наличии хоть одного "да", он ставил "да"! / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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