Вернуться   Форум программистов > Форум Базы данных > Форум SQL Server

SQL Server

Программирование MS SQL Server

Ответ
 
Старый 09.10.2006, 18:52   #1
Vodizzz
Местный
 
Регистрация: 20.04.2006
Сообщений: 275
Vodizzz пока не определено
По умолчанию Помогите, пож., правильно составить процедурку

Здравствуйте!

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

У меня есть таблица, в которой имеется поле 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
Vodizzz вне форума  
Старый 09.10.2006, 19:11   #2
Alexey Spirin
Местный
 
Регистрация: 11.08.2001
Сообщений: 1,753
Alexey Spirin пока не определено
По умолчанию RE: Помогите, пож., правильно составить процедурку

Если все именно так, как ввы напсиали (т.е. во второй таблице есть поля Вася и Петя, а не 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-comfficeffice" /><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
Alexey Spirin вне форума  
Старый 09.10.2006, 19:16   #3
Vodizzz
Местный
 
Регистрация: 20.04.2006
Сообщений: 275
Vodizzz пока не определено
По умолчанию RE: Помогите, пож., правильно составить процедурку

У меня первый вариант.



Т.е. когда имена будут добавляться, то и процедуру придется менять? Я думал можно как-нибудь в цикле это сделать.
Vodizzz вне форума  
Старый 09.10.2006, 19:29   #4
Alexey Spirin
Местный
 
Регистрация: 11.08.2001
Сообщений: 1,753
Alexey Spirin пока не определено
По умолчанию RE: Помогите, пож., правильно составить процедурку

Можно и в цикле и при помощи PIVOT.
Однако, какая необходимость создавать для каждого имени свой столбец? Это глупость, на мой взгляд.
Alexey Spirin вне форума  
Старый 09.10.2006, 19:34   #5
bazile
Местный
 
Регистрация: 05.01.2001
Сообщений: 6,924
bazile пока не определено
По умолчанию RE: Помогите, пож., правильно составить процедурку

Я бы шире вопрос поставил. Зачем вообще отдельная таблица? Ведь по сути она дублирует первую из которой с помощью sum/where/group by можно всегда получить нужную информацию.
bazile вне форума  
Старый 09.10.2006, 19:47   #6
Vodizzz
Местный
 
Регистрация: 20.04.2006
Сообщений: 275
Vodizzz пока не определено
По умолчанию RE: Помогите, пож., правильно составить процедурку

Я с вами полностью согласен, но мне поставили такую задачу :



А как в SQL можно в цикле перебрать поля?
Vodizzz вне форума  
Старый 09.10.2006, 19:51   #7
Alexey Spirin
Местный
 
Регистрация: 11.08.2001
Сообщений: 1,753
Alexey Spirin пока не определено
По умолчанию RE: Помогите, пож., правильно составить процедурку

Хмм... а для каких целей, не объяснили? Это заранее неправильный подход для ХРАНЕНИЯ данных.
Подобный вид обычно применяется только в отчетах. Именно в бюазе хранить в таком виде нет никого смысла.
Alexey Spirin вне форума  
Старый 09.10.2006, 19:59   #8
Alexey Spirin
Местный
 
Регистрация: 11.08.2001
Сообщений: 1,753
Alexey Spirin пока не определено
По умолчанию RE: Помогите, пож., правильно составить процедурку

Перебрать поля можно, к примеру, так (если дальше будете динамический 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-comfficeffice" /><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
Alexey Spirin вне форума  
Старый 09.10.2006, 20:49   #9
Vodizzz
Местный
 
Регистрация: 20.04.2006
Сообщений: 275
Vodizzz пока не определено
По умолчанию RE: Помогите, пож., правильно составить процедурку

Это и будет своего рода отчет за день .
Vodizzz вне форума  
Старый 09.10.2006, 21:00   #10
Alexey Spirin
Местный
 
Регистрация: 11.08.2001
Сообщений: 1,753
Alexey Spirin пока не определено
По умолчанию RE: Помогите, пож., правильно составить процедурку

Тогда почитайте книжки по базам. Поверьте, полезно.
Alexey Spirin вне форума  
Ads
Ответ
Опции темы

Похожие темы
Тема Автор
Добавление данных. SQL Server
Давненько не работал с базами данных. И честно говоря просто не сталкивался с boolе-выми типами данных SQL Server. В сязи с чем вопрос какой тип данных булевый? Судя по всему bit. А вот как добавлять...
jerry
SQL Server Помогите установить готовый скрипт на asp+sql
Проблемы начинаются при импортировании sql БД из файла (файл в приложении), выводятся след. ошибки: The login 'mediahive' does not exist. User or role 'mediahive' does not exist in this database....
cybereug
Как правильно и быстро выполнить огромный скрипт из файла? SQL Server
Есть такая проблема... Для одного Web-проекта используется виртуальный сервер весьма ограниченной мощности. А для функционирования требуется ежедневно обновлять базу данных с помощью скачиваемых...
Dion
Соединение таблиц SQL Server
Здравствуйте! У меня такой вопорс: Можно ли объединить две таблицы так, чтобы из второй таблицы выводились только те записи, которых нет в первой таблице. ... даже немного не так... что-то типа...
Vodizzz
SQL Server Проблема в названии поля
Здравствуйте! Такой вопрос: Есть строка SELECT @Turn=Sum(A10_Turn) FROM tbl WHERE <=getdate() and >=DateADD(dd,-10,getdate())
Vodizzz
SQL Server SQL 2005:Integration Services -Foreach Loop Container
Мне надо было перевести даные с одной ДБ на другую. Сделала в SSIS Packge Import and Export на перевод 5 таблиц. Сейчас понадобилось добавить еще несколько таблиц и не могу найти,как это...
mayyakom



Текущее время: 06:02. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.

Рейтинг@Mail.ru