powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / xQuery
5 сообщений из 5, страница 1 из 1
xQuery
    #39780211
Nemoxur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, коллеги.
Помогите, пожалуйста, составить запрос

Код: 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.
SET LANGUAGE 'Russian';
DECLARE @xml XML = 
'
<Файл>
  <Документ ДатаДок="25.02.2016" ОтчетГод="2015">
     <СведДох Ставка="13">
      <ДохВыч>
        <СвСумДох Месяц="01" КодДоход="2000" СумДоход="345.63" />
        <СвСумДох Месяц="01" КодДоход="4800" СумДоход="371.00" />
        <СвСумДох Месяц="02" КодДоход="2000" СумДоход="237.78" />
        <СвСумДох Месяц="02" КодДоход="2012" СумДоход="172.72" />
      </ДохВыч>
    </СведДох>
    <СведДох Ставка="35">
      <ДохВыч>
        <СвСумДох Месяц="01" КодДоход="2610" СумДоход="116.77" />
        <СвСумДох Месяц="02" КодДоход="2610" СумДоход="87.89" />
        <СвСумДох Месяц="03" КодДоход="2610" СумДоход="77.84" />
      </ДохВыч>
    </СведДох>
   </Документ>
</Файл>
'
SELECT [color=red][/color]
	[ДатаДок]	= doc.col.value('@ДатаДок', 'date')
,	[ОтчетГод]	= doc.col.value('@ОтчетГод', 'int')
,	[Ставка] = doc.col.value('СведДох[1]/@Ставка','int')
,	[Месяц] = x.col.value('@Месяц', 'varchar(2)')
,	[КодДоход] = x.col.value('@КодДоход', 'int')
,	[СумДоход] = x.col.value('@СумДоход', 'decimal(19,2)')
FROM @xml.nodes('/Файл/Документ') AS doc(col)
CROSS APPLY doc.col.nodes( 'СведДох/ДохВыч/СвСумДох' ) AS x (col)



что бы получилась ставка 35, а не 13 как в запросе.

ДатаДок ОтчетГод Ставка Месяц КодДоход СумДоход2016-02-25 2015 13 01 2000 345.632016-02-25 2015 13 01 4800 371.002016-02-25 2015 13 02 2000 237.782016-02-25 2015 13 02 2012 172.722016-02-25 2015 35 01 2610 116.772016-02-25 2015 35 02 2610 87.892016-02-25 2015 35 03 2610 77.84
...
Рейтинг: 0 / 0
xQuery
    #39780217
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
[Ставка] = x.col.value('(../..)[1]/@Ставка','int')
...
Рейтинг: 0 / 0
xQuery
    #39780220
Nemoxur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

Спасибо большое!
...
Рейтинг: 0 / 0
xQuery
    #39839904
Nemoxur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
DECLARE @xml xml= '<Файл ИдФайл="NO_NDFL0_0000_0000_0000000000000000000_00000000_0000d0fd-000c-0fbf-0000-f00ffd0000d0" ВерсПрог="КОНТУР-ОТЧЕТ ПФ 0.0" ВерсФорм="0.00">

  <СвРекв ОКТМО="00000000" ОтчетГод="0000" ПризнакФ="0">

    <СвЮЛ ИННЮЛ="0000000000" КПП="000000000" />

    <Подписант ПрПодп="0">
      <ФИО Фамилия="Александров" Имя="Александр" Отчество="Александрович" />

      <СвПред НаимДок="Доверенность №000 от 00.00.0000" НаимОрг="test" />

    </Подписант>

  </СвРекв>

<Документ КНД="0000000" НомСпр="0000" НомКорр="00" Признак="0" ДатаДок="00.00.0000" ОтчетГод="0000" КодНО="0000">

    <СвНА ОКТМО="00000000">

      <СвНАЮЛ НаимОрг="test" ИННЮЛ="000000000" КПП="000000000" />

    </СвНА>

    <ПолучДох ИННФЛ="000000000" Статус="0" ДатаРожд="00.00.0000" Гражд="000">

      <ФИО Фамилия="Платонов" Имя="Платон" Отчество="Платонович" />

      <УдЛичнФЛ КодУдЛичн="00" СерНомДок="00 00 00000" />

    </ПолучДох>

    <СведДох Ставка="13">

      <ДохВыч>

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="000000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="00000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="000000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="000000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="000000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="000000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="00000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="00000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="00000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="000000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="00000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="000000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="00000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="000000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0000.00" />

      </ДохВыч>

      <СумИтНалПер СумДохОбщ="0000000.00" НалБаза="0000000.00" НалИсчисл="000000" НалУдерж="000000" НалПеречисл="000000" НалУдержЛиш="0" НалНеУдерж="0" АвансПлатФикс="0" />

    </СведДох>

    <СведДох Ставка="35">

      <ДохВыч>

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="000.00" />

        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="000.00" />

      </ДохВыч>

      <СумИтНалПер СумДохОбщ="0000.00" НалБаза="0000.00" НалИсчисл="0000" НалУдерж="0000" НалПеречисл="0000" НалУдержЛиш="0" НалНеУдерж="0" АвансПлатФикс="0" />

    </СведДох>

  </Документ>
  <Документ КНД="0000000" НомСпр="0000" НомКорр="00" Признак="0" ДатаДок="00.00.0000" ОтчетГод="0000" КодНО="0000">
    <СвНА ОКТМО="00000000">
      <СвНАЮЛ НаимОрг="test" ИННЮЛ="0000000000" КПП="000000000" />
    </СвНА>
    <ПолучДох ИННФЛ="000000000000" Статус="0" ДатаРожд="00.00.0000" Гражд="000">
      <ФИО Фамилия="Сергеев" Имя="Сергей" Отчество="Сергеивич" />
      <УдЛичнФЛ КодУдЛичн="00" СерНомДок="00 00 000000" />
    </ПолучДох>
    <СведДох Ставка="13">
      <ДохВыч>
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="00000.00" />
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0000.00" />
      </ДохВыч>
      <СумИтНалПер СумДохОбщ="00000.00" НалБаза="00000.00" НалИсчисл="0000" НалУдерж="0000" НалПеречисл="0000" НалУдержЛиш="0" НалНеУдерж="0" АвансПлатФикс="0" />
    </СведДох>
  </Документ>
  <Документ КНД="0000000" НомСпр="0000" НомКорр="00" Признак="0" ДатаДок="00.00.0000" ОтчетГод="0000" КодНО="0000">
    <СвНА ОКТМО="00000000">
      <СвНАЮЛ НаимОрг="test" ИННЮЛ="0000000000" КПП="000000000" />
    </СвНА>
    <ПолучДох ИННФЛ="000000000000" Статус="0" ДатаРожд="00.00.0000" Гражд="000">
      <ФИО Фамилия="Петров" Имя="Пётр" Отчество="Петрович" />
      <УдЛичнФЛ КодУдЛичн="00" СерНомДок="00 00 000000" />
    </ПолучДох>
    <СведДох Ставка="13">
      <ДохВыч>
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="000.00">
          <СвСумВыч КодВычет="000" СумВычет="000.00" />
        </СвСумДох>
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="000.00">
          <СвСумВыч КодВычет="000" СумВычет="000.00" />
        </СвСумДох>
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="000.00">
          <СвСумВыч КодВычет="000" СумВычет="000.00" />
        </СвСумДох>
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="000.00">
          <СвСумВыч КодВычет="000" СумВычет="000.00" />
        </СвСумДох>
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0000.00">
          <СвСумВыч КодВычет="000" СумВычет="0000.00" />
        </СвСумДох>
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="000.00">
          <СвСумВыч КодВычет="000" СумВычет="000.00" />
        </СвСумДох>
      </ДохВыч>
      <СумИтНалПер СумДохОбщ="0000.00" НалБаза="000.00" НалИсчисл="00" НалУдерж="00" НалПеречисл="00" НалУдержЛиш="0" НалНеУдерж="0" АвансПлатФикс="0" />
    </СведДох>
  </Документ>
  <Документ КНД="0000000" НомСпр="0000" НомКорр="00" Признак="0" ДатаДок="00.00.0000" ОтчетГод="0000" КодНО="0000">
    <СвНА ОКТМО="00000000">
      <СвНАЮЛ НаимОрг="test" ИННЮЛ="0000000000" КПП="000000000" />
    </СвНА>
    <ПолучДох ИННФЛ="000000000000" Статус="0" ДатаРожд="00.00.0000" Гражд="000">
      <ФИО Фамилия="Сидоров" Имя="Сидр" Отчество="Сидорович" />
      <УдЛичнФЛ КодУдЛичн="00" СерНомДок="00 00 000000" />
    </ПолучДох>
    <СведДох Ставка="13">
      <ДохВыч>
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="00000.00" />
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0000.00" />
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="00000.00" />
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0000.00" />
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="00000.00" />
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0000.00" />
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="00000.00" />
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0000.00" />
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="00000.00" />
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0000.00" />
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="00000.00" />
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0000.00" />
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="00000.00" />
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0000.00" />
      </ДохВыч>
      <СумИтНалПер СумДохОбщ="000000.00" НалБаза="000000.00" НалИсчисл="00000" НалУдерж="00000" НалПеречисл="00000" НалУдержЛиш="0" НалНеУдерж="0" АвансПлатФикс="0" />
    </СведДох>
  </Документ>
  <Документ КНД="0000000" НомСпр="0000" НомКорр="00" Признак="0" ДатаДок="00.00.0000" ОтчетГод="0000" КодНО="0000">
    <СвНА ОКТМО="00000000">
      <СвНАЮЛ НаимОрг="test" ИННЮЛ="000000000000" КПП="000000000" />
    </СвНА>
    <ПолучДох ИННФЛ="000000000000" Статус="0" ДатаРожд="00.00.0000" Гражд="000">
      <ФИО Фамилия="Иванов" Имя="Иван" Отчество="Иванович" />
      <УдЛичнФЛ КодУдЛичн="00" СерНомДок="00 00 000000" />
    </ПолучДох>
    <СведДох Ставка="13">
      <ДохВыч>
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0.00">
          <СвСумВыч КодВычет="000" СумВычет="0.00" />
        </СвСумДох>
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0.00" />
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0.00" />
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0.00" />
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0.00" />
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0.00" />
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0.00" />
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0.00" />
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0.00" />
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0.00" />
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0.00" />
        <СвСумДох Месяц="00" КодДоход="0000" СумДоход="0.00" />
      </ДохВыч>
      <НалВычССИ>
        <ПредВычССИ КодВычет="000" СумВычет="0.00" />
        <ПредВычССИ КодВычет="000" СумВычет="0.00" />
        <ПредВычССИ КодВычет="000" СумВычет="0.00" />
      </НалВычССИ>
      <СумИтНалПер СумДохОбщ="0.00" НалБаза="0.00" НалИсчисл="0" НалУдерж="0" НалПеречисл="0" НалУдержЛиш="0" НалНеУдерж="0" АвансПлатФикс="0" />
    </СведДох>
  </Документ>
  </Файл>';

SELECT
	[Фамилия] = doc.col.value('ПолучДох[1]/ФИО[1]/@Фамилия', 'varchar(100)')
,	[Имя] = doc.col.value('ПолучДох[1]/ФИО[1]/@Имя', 'varchar(100)')
,	[Отчество] = doc.col.value('ПолучДох[1]/ФИО[1]/@Отчество', 'varchar(100)')
,	[Ставка] = СведДох.query('.').value('СведДох[1]/@Ставка','int')
FROM @xml.nodes('/Файл/Документ') AS doc(col)
CROSS APPLY @xml.nodes('/Файл/Документ/СведДох') col(СведДох)



Добрый день, как сделать так что бы ставка определилась корректно, а не как сейчас?

idФамилия Имя Отчество Ставка1 Платонов Платон Платонович 132 Платонов Платон Платонович 353 Платонов Платон Платонович 134 Платонов Платон Платонович 135 Платонов Платон Платонович 136 Платонов Платон Платонович 137 Сергеев Сергей Сергеивич 138 Сергеев Сергей Сергеивич 359 Сергеев Сергей Сергеивич 1310 Сергеев Сергей Сергеивич 1311 Сергеев Сергей Сергеивич 1312 Сергеев Сергей Сергеивич 1313 Петров Пётр Петрович 1314 Петров Пётр Петрович 3515 Петров Пётр Петрович 1316 Петров Пётр Петрович 1317 Петров Пётр Петрович 1318 Петров Пётр Петрович 1319 Сидоров Сидр Сидорович 1320 Сидоров Сидр Сидорович 3521 Сидоров Сидр Сидорович 1322 Сидоров Сидр Сидорович 1323 Сидоров Сидр Сидорович 1324 Сидоров Сидр Сидорович 1325 Иванов Иван Иванович 1326 Иванов Иван Иванович 3527 Иванов Иван Иванович 1328 Иванов Иван Иванович 1329 Иванов Иван Иванович 1330 Иванов Иван Иванович 13

Модератор: А следующую простыню без спойлера вообще на месте сотру.
...
Рейтинг: 0 / 0
xQuery
    #39840005
Nemoxur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извините за простыню, не нашёл как сделать.

Проблема решилась, может кому пригодится.
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT	 col.[СведДох].value('ПолучДох[1]/ФИО[1]/@Фамилия', 'varchar(100)')
		,col.[СведДох].value('ПолучДох[1]/ФИО[1]/@Имя', 'varchar(100)')
		,col.[СведДох].value('ПолучДох[1]/ФИО[1]/@Отчество', 'varchar(100)')
		,col2.[СведДох].value('@Ставка', 'varchar(100)')
FROM @xml.nodes('.') AS doc(col)
CROSS APPLY doc.[col].nodes('Файл/Документ') col(СведДох)
CROSS APPLY col.[СведДох].nodes('СведДох') col2(СведДох)
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / xQuery
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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