Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
0 / 0 / 1
Регистрация: 26.06.2012
Сообщений: 275

Помогите, пож., правильно составить процедурку

09.10.2006, 17:52. Показов 5521. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Помогите, пож., правильно составить процедурку.

У меня есть таблица, в которой имеется поле Name (Имя), DateT(Дата) и поле Cnt (Количество).

В таблицу постоянно заносятся данные.

Также имеется еще одна таблица, у которой поля: DateT(Дата) и все Name какие есть в первой таблице.

Мне нужно сделать процедуру, которая считает для каждого Name из первой таблицы общее количество за день, а результат должен заносится во вторую таблицу.



Что-то такое:



tbl1

Name | DateT | Cnt

--------------------

Вася | 01.09.2006 | 3

Петя | 01.09.2006 | 2

Вася | 02.09.2006 | 3

Петя | 02.09.2006 | 7

Вася | 02.09.2006 | 5



tbl2

DateT | Вася | Петя

--------------------

01.09.2006 | 3 | 2

02.09.2006 | 8 | 7
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.10.2006, 17:52
Ответы с готовыми решениями:

Помогите составить Блок - схему. Пож.
Обработка строковых даных. program srs_7; uses crt; var s,s1,s2:string; n,i,j,f:integer; begin clrscr; readln(s); for i:=1...

подскажите как составить процедурку
Помогите составить процедурку для вычисления значения двух функций где a=0.1 b=0.3 x начала = 0,18

Помогите правильно составить запрос
Доброе время суток. Не могу сделать запрос. Заранее спасибо В документе есть табличная часть в неё товары которые входят в разные...

20
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
09.10.2006, 18:11
Если все именно так, как ввы напсиали (т.е. во второй таблице есть поля Вася и Петя, а не Name), то запрос будет таким:</P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes SELECT</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <FONT color=#000000> <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o></o></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <FONT color=#000000><SPAN style="mso-tab-count: 1 </SPAN>DateT<SPAN style="COLOR: gray ,</SPAN><FONT color=#000000> <o></o></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <SPAN style="mso-tab-count: 1 <FONT color=#000000> </SPAN><SPAN style="COLOR: fuchsia sum</SPAN><SPAN style="COLOR: gray (</SPAN><SPAN style="COLOR: blue case</SPAN><FONT color=#000000> <SPAN style="COLOR: blue when</SPAN><SPAN style="mso-spacerun: yes <FONT color=#000000> </SPAN><SPAN style="COLOR: red 'Вася'</SPAN><FONT color=#000000> <SPAN style="COLOR: blue then</SPAN><FONT color=#000000> cnt <SPAN style="COLOR: blue else</SPAN><FONT color=#000000> 0 <SPAN style="COLOR: blue end</SPAN><SPAN style="COLOR: gray )</SPAN><FONT color=#000000> Вася<SPAN style="COLOR: gray ,</SPAN><FONT color=#000000> <o></o></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <SPAN style="mso-tab-count: 1 <FONT color=#000000> </SPAN><SPAN style="COLOR: fuchsia sum</SPAN><SPAN style="COLOR: gray (</SPAN><SPAN style="COLOR: blue case</SPAN><FONT color=#000000> <SPAN style="COLOR: blue when</SPAN><SPAN style="mso-spacerun: yes <FONT color=#000000> </SPAN><SPAN style="COLOR: red 'Петя'</SPAN><FONT color=#000000> <SPAN style="COLOR: blue then</SPAN><FONT color=#000000> cnt <SPAN style="COLOR: blue else</SPAN><FONT color=#000000> 0 <SPAN style="COLOR: blue end</SPAN><SPAN style="COLOR: gray )</SPAN><FONT color=#000000> Петя<SPAN style="COLOR: gray ,</SPAN><FONT color=#000000> <o></o></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <o><FONT color=#000000> </o></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes FROM</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <FONT color=#000000> Tbl <o></o></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes GROUP</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <FONT color=#000000> <SPAN
0
0 / 0 / 1
Регистрация: 26.06.2012
Сообщений: 275
09.10.2006, 18:16  [ТС]
У меня первый вариант.



Т.е. когда имена будут добавляться, то и процедуру придется менять? Я думал можно как-нибудь в цикле это сделать.
0
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
09.10.2006, 18:29
Можно и в цикле и при помощи PIVOT.
Однако, какая необходимость создавать для каждого имени свой столбец? Это глупость, на мой взгляд.
0
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
09.10.2006, 18:34
Я бы шире вопрос поставил. Зачем вообще отдельная таблица? Ведь по сути она дублирует первую из которой с помощью sum/where/group by можно всегда получить нужную информацию.
0
0 / 0 / 1
Регистрация: 26.06.2012
Сообщений: 275
09.10.2006, 18:47  [ТС]
Я с вами полностью согласен, но мне поставили такую задачу :



А как в SQL можно в цикле перебрать поля?
0
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
09.10.2006, 18:51
Хмм... а для каких целей, не объяснили? Это заранее неправильный подход для ХРАНЕНИЯ данных.
Подобный вид обычно применяется только в отчетах. Именно в бюазе хранить в таком виде нет никого смысла.
0
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
09.10.2006, 18:59
Перебрать поля можно, к примеру, так (если дальше будете динамический SQL использовать):</P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes DECLARE</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <FONT color=#000000> @Fields <SPAN style="COLOR: blue varchar</SPAN><SPAN style="COLOR: gray (</SPAN><FONT color=#000000>1024<SPAN style="COLOR: gray )<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o></o></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes SET</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <FONT color=#000000> @Fields <SPAN style="COLOR: gray =</SPAN><SPAN style="COLOR: red ''<o></o></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <o> </o></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes SELECT</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <FONT color=#000000> @Fields<SPAN style="COLOR: gray =</SPAN><FONT color=#000000>@Fields <SPAN style="COLOR: gray +</SPAN><FONT color=#000000> <SPAN style="COLOR: blue Name</SPAN><FONT color=#000000> <SPAN style="COLOR: gray +</SPAN><FONT color=#000000> <SPAN style="COLOR: red ', '<o></o></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes FROM</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <FONT color=#000000> syscolumns <o></o></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes WHERE</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <FONT color=#000000> ID<SPAN style="COLOR: gray =(</SPAN><SPAN style="COLOR: blue SELECT</SPAN><FONT color=#000000> ID <SPAN style="COLOR: blue FROM</SPAN><FONT color=#000000> sysobjects <SPAN style="COLOR: blue WHERE</SPAN><FONT color=#000000> <SPAN style="COLOR: blue NAME</SPAN><SPAN style="COLOR: gray =</SPAN><SPAN style="COLOR: red 'dom_our'</SPAN><SPAN style="COLOR: gray )<o></o></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: gray; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <o> </o></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes SET</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: y
0
0 / 0 / 1
Регистрация: 26.06.2012
Сообщений: 275
09.10.2006, 19:49  [ТС]
Это и будет своего рода отчет за день .
0
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
09.10.2006, 20:00
Тогда почитайте книжки по базам. Поверьте, полезно.
0
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
09.10.2006, 20:14
Вот такой вариант с динамическим sql можно использовать.
T-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
SELECT SUM(cnt) nameCnt,
       name,
       DateT
       INTO   #t3
       FROM   tbl1
       WHERE  DateT = '02.09.2006'
GROUP BY Name, DateT
WHILE EXISTS (SELECT * FROM #t3)
BEGIN
   DECLARE @nameCnt int,
           @name varchar(100),
           @datet datetime
           
   SELECT TOP 1
          @nameCnt = nameCnt,
          @name = name,
          @datet = dateT
          FROM #t3
   
   DECLARE @SQLString nvarchar(500)
   SET @SQLString = 'UPDATE #tbl2 SET ['+@name+']=@cnt WHERE DateT=@DateT;'+
                    ' IF 0=@@ROWCOUNT INSERT INTO #tbl2 (DateT,['+@name+']) VALUES(@DateT, @cnt)'
   EXEC sp_executesql @SQLString, N'@DateT datetime, @cnt int', @DateT, @nameCnt
   
   DELETE FROM #t3
   WHERE name=@name AND dateT=@datet
END
DROP TABLE #t3
0
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
09.10.2006, 20:16
Мда. Забыл пояснить. Данный код использует динамический sql чтобы не было нужно менять код когда в таблице tbl1 появятся новое имя, а в tbl2 соответствующее ей поле.
В первом SELECT надо сделать условоие чтобы выборка шли по текущей дате.
0
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
09.10.2006, 20:30
В свою очередь, мой экзампл для MS SQL2005:

T-SQL
1
2
3
4
5
6
7
8
CREATE TABLE History (Name  varchar (100 ), DT datetime, Quan int )
INSERT INTO History VALUES ('Вася', '01.01.2005', 5)
INSERT INTO History VALUES ('Вася', '01.01.2005', 51)
INSERT INTO History VALUES ('Вася', '01.01.2005', 45)
SELECT *
FROM  History h
PIVOT (Sum (Quan) FOR Name IN ([Вася], [Петя])) as pvt
DROP TABLE History
Для 2000 сервера можно сделать нечто подобное, если использовать специальные хранимые процедуры, к примеру, эту: http://www.sql.ru/faq/faq_topic.aspx?fid=358
0
0 / 0 / 1
Регистрация: 26.06.2012
Сообщений: 275
10.10.2006, 15:12  [ТС]
Спасибо большое! Исчерпывающе
0
0 / 0 / 1
Регистрация: 26.06.2012
Сообщений: 275
11.10.2006, 18:48  [ТС]
Еще вопрос:

Если мне нужно обновить какое-то поле в таблице, то я пишу так:
T-SQL
1
UPDATE tbl1 SET Ivan=57 FROM tbl1 WHERE DateT='09.02.2006'
А если я заранее не знаю как называется поле и только после всяких манипуляций узнаю, что поле называется Ivan и записано у меня это примерно так @name='Ivan', то как мне записать запрос на обновление?

Имя поля я узнал при таком запросе:
T-SQL
1
SELECT column_name,  as Automat FROM [ХХХ].information_schema.columns WHERE table_name = 'tbl1'
0
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
11.10.2006, 18:53
Да вы, батенька, извращенец))
а) Ваш запрос лучше будет выглядеть так: UPDATE tbl1 SET Ivan=57 WHERE DateT='09.02.2006'
б) Используйте динамический SQL. Как - читайте BOL. Потрудитесь хоть что-то сами найти.
0
0 / 0 / 1
Регистрация: 26.06.2012
Сообщений: 275
11.10.2006, 18:56  [ТС]
Что есть - то есть



Если б я еще понимал что искать в BOL
0
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
11.10.2006, 18:58
По моему только через динамический SQL такое решается. Формируем строку и выполняем ее через sp_executesql.
0
0 / 0 / 1
Регистрация: 26.06.2012
Сообщений: 275
11.10.2006, 19:15  [ТС]
А! Понятно! Т.е. вот так:
T-SQL
1
2
set @sqlstr='Update tbl1 set '+@name+'='+@cnt+'  Where dateT=09.19.2006'
exec(@sqlstr)
0
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
11.10.2006, 19:35
ага... только перед этим сделайте PRINT строки и посомтрите что у вас получилось.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.10.2006, 19:35
Помогаю со студенческими работами здесь

Строки!! Помогите,пож-та!
Дана строка ,записать ее содержимое в другую строку,повторив ее при этом 3 раза. Подсчитать количество строчных букв в ней. _______ ...

Пож. помогите по записям!!!
Помогите кто может, ПЛЗ. нужно составить прогу которая определяет банк, в котором максимальное количество клиентов БУДУ благодарен,...

помогите пож-ста
Даны два одномерных массива произвольных чисел.Определить в каком из них минимальный элемент больше.Вывести найденный элемент и...

Помогите правильно составить .htaccess (RewriteRule)
1) Все файлы, заканчивающиеся на .php, обрабатывать _index.php 2) Все остальные файлы, обрабатывать pages.php Но что-то не работает ...

Простой запрос. Помогите правильно составить.
Надо добавить столбец в таблицу Access (рус. верс). ALTER TABLE Adr ADD (name text(255)) не прокатывает. Спасибо.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru