Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Выборка данных из таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31822
Прогер_самоучка
Glory
"Февраль" - это у вас таблица или запрос ?

У меня таблица с полями
ID
ID_M
Type
Val
D

В Type хранится (В1, Е1... В31, Е31) То есть, для 1 ID_M будет 62 записи(если в месяце 31 день)
А запросом я хочу вывести для февраля(к примеру) Можно для марта.
Отлично, вот и выводите записи из этой таблицы, хоть февраль с мартом одновременно, все 56+62 записей для февраля и марта.
25 апр 13, 16:20    [14231048]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
Прогер_самоучка
А запросом я хочу вывести для февраля(к примеру)

Мда.
Что "для февраля" то ?

select * from mytable where "для февраля" ?
или
select "для февраля" from mytable ?
25 апр 13, 16:22    [14231066]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из таблицы  [new]
Прогер_самоучка
Member

Откуда:
Сообщений: 68911
alexeyvg
Примите это как данность.
Принял.

автор
Это так во всём программировании, не только в SQL: нельзя никакими условиями внутри выражения сделать вид, что самого выражения не существует, можно лишь изменить значение выражения.
Каким способом поставить условие "снаружи" для выражения?(Если возможно)
25 апр 13, 16:22    [14231067]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из таблицы  [new]
Прогер_самоучка
Member

Откуда:
Сообщений: 68911
автор
А запросом я хочу вывести для февраля(к примеру) Можно для марта.
Ссори, оговорился. Конечно же, для мартаапреля(60 записей)
alexeyvg
Отлично, вот и выводите записи из этой таблицы, хоть февраль с мартом одновременно, все 56+62 записей для февраля и марта.
Это как вариант. Но , а если нужен только февраль? Как тогда быть? Создавать ещё 1 запрос отдельно для февраля?
25 апр 13, 16:29    [14231099]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31822
Прогер_самоучка
Каким способом поставить условие "снаружи" для выражения?(Если возможно)
В, опять же, любом языке программирования, можно не выполнить или выполнить целиком стейтмент языка, т.е. в данном случае ваш SELECT (используя оператор IF).

Стейтмент SELECT... определяется во время компиляции кода, там вы указываете набор выходных столбцов, и их в процессе выполнения менять нельзя.

Можно составлять весь ваш запрос как строку во время выполнения программы, а потом давать команду скомпилировать её и выполнить, см. "Динамический SQL" (EXEC). Но это конечно, менее удобно, производительно, и требует дополнительных прав для того, кто будет исполнять код. Лучше обойтись более традиционными способами программирования.
25 апр 13, 16:30    [14231104]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31822
Прогер_самоучка
alexeyvg
Отлично, вот и выводите записи из этой таблицы, хоть февраль с мартом одновременно, все 56+62 записей для февраля и марта.
Это как вариант. Но , а если нужен только февраль? Как тогда быть? Создавать ещё 1 запрос отдельно для февраля?
Я так и не понимаю, что вам нужно :-)

Вы писали:
Прогер_самоучка
ID
ID_M
Type
Val
D

В Type хранится (В1, Е1... В31, Е31) То есть, для 1 ID_M будет 62 записи(если в месяце 31 день)

То есть вам достаточно выполнить select * from таблица, и будут выведены все записи и за февраль, и за март, и вообще за все месяцы. Т.е. запрос для любых дат (для оддного дня или для 10 лет) получается одинаковый. Как я понял.
25 апр 13, 16:33    [14231139]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из таблицы  [new]
Прогер_самоучка
Member

Откуда:
Сообщений: 68911
alexeyvg,
автор
То есть вам достаточно выполнить select * from таблица, и будут выведены все записи и за февраль, и за март, и вообще за все месяцы
Да.
автор
Т.е. запрос для любых дат (для одного дня или для 10 лет) получается одинаковый. Как я понял.
Мне нужен запрос для вывода моей таблицы, как месяца(или нескольких). Если у меня будет ТОЛЬКО февраль, то окажется, что в нём 31 день))
Приложу запрос, чтоб понятнее было.

+
Select distinct

	t3.M, t3.Y,t2.ID_M, t3.BID, t3.SMID, 

	(select val from t2 where type='B1') as [B1],
	(select val from t2 where type='E1') as [E1],
	(select val from t2 where type='B2') as [B2],
	(select val from t2 where type='E2') as [E2],
	(select val from t2 where type='B3') as [B3],
	(select val from t2 where type='E3') as [E3],
	(select val from t2 where type='B4') as [B4],
	(select val from t2 where type='E4') as [E4],
	(select val from t2 where type='B5') as [B5],
	(select val from t2 where type='E5') as [E5],
	(select val from t2 where type='B6') as [B6],
	(select val from t2 where type='E6') as [E6],
	(select val from t2 where type='B7') as [B7],
	(select val from t2 where type='E7') as [E7],
	(select val from t2 where type='B8') as [B8],
	(select val from t2 where type='E8') as [E8],
	(select val from t2 where type='B9') as [B9],
	(select val from t2 where type='E9') as [E9],
	(select val from t2 where type='B10') as [B10],
	(select val from t2 where type='E10') as [E10],
	(select val from t2 where type='B11') as [B11],
	(select val from t2 where type='E11') as [E11],
	(select val from t2 where type='B12') as [B12],
	(select val from t2 where type='E12') as [E12],
	(select val from t2 where type='B13') as [B13],
	(select val from t2 where type='E13') as [E13],
	(select val from t2 where type='B14') as [B14],
	(select val from t2 where type='E14') as [E14],
	(select val from t2 where type='B15') as [B15],
	(select val from t2 where type='E15') as [E15],
	(select val from t2 where type='B16') as [B16],
	(select val from t2 where type='E16') as [E16],
	(select val from t2 where type='B17') as [B17],
	(select val from t2 where type='E17') as [E17],
	(select val from t2 where type='B18') as [B18],
	(select val from t2 where type='E18') as [E18],
	(select val from t2 where type='B19') as [B19],
	(select val from t2 where type='E19') as [E19],
	(select val from t2 where type='B20') as [B20],
	(select val from t2 where type='E20') as [E20],
	(select val from t2 where type='B21') as [B21],
	(select val from t2 where type='E21') as [E21],
	(select val from t2 where type='B22') as [B22],
	(select val from t2 where type='E22') as [E22],
	(select val from t2 where type='B23') as [B23],
	(select val from t2 where type='E23') as [E23],
	(select val from t2 where type='B24') as [B24],
	(select val from t2 where type='E24') as [E24],
	(select val from t2 where type='B25') as [B25],
	(select val from t2 where type='E25') as [E25],
	(select val from t2 where type='B26') as [B26],
	(select val from t2 where type='E26') as [E26],
	(select val from t2 where type='B27') as [B27],
	(select val from t2 where type='E27') as [E27],
	(select val from t2 where type='B28') as [B28],
	(select val from t2 where type='E28') as [E28],
	(select val from t2 where type='B29') as [B29],
	(select val from t2 where type='E29') as [B29],
	(select val from t2 where type='B30') as [B30],
	(select val from t2 where type='B30') as [B30],
	(select val from t2 where type='B31') as [B31],
	(select val from t2 where type='E31') as [E31]

from t2, t3
where t3.Id=t2.id_m 
25 апр 13, 16:45    [14231264]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из таблицы  [new]
Прогер_самоучка
Member

Откуда:
Сообщений: 68911
Glory
select * from mytable where "для февраля" ?
Больше похоже на это.
25 апр 13, 16:47    [14231284]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
Прогер_самоучка
Glory
select * from mytable where "для февраля" ?
Больше похоже на это.

И откуда сервер узнает, что должен показать в этом году 28 полей, а в висакосном - 29 ?
25 апр 13, 16:49    [14231300]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31822
Прогер_самоучка
автор
То есть вам достаточно выполнить select * from таблица, и будут выведены все записи и за февраль, и за март, и вообще за все месяцы
Да.
автор
Т.е. запрос для любых дат (для одного дня или для 10 лет) получается одинаковый. Как я понял.
Мне нужен запрос для вывода моей таблицы, как месяца(или нескольких). Если у меня будет ТОЛЬКО февраль, то окажется, что в нём 31 день))
Странно, отвечаете "да", а потом что то ещё пишете...

Если "да", то нужно просто выполнить запрос select * from таблица, и всё.
Прогер_самоучка
Приложу запрос, чтоб понятнее было.
Запрос нерабочий, он выводит набор случайных записей. Потому что запрос:
(select val from t2 where type='B16') as [B16]
Выведет случайную запись из t2, для которой выполняется условие type='B16', если конечно type не является ключём этой таблицы.
25 апр 13, 16:52    [14231334]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из таблицы  [new]
Прогер_самоучка
Member

Откуда:
Сообщений: 68911
Glory
И откуда сервер узнает, что должен показать в этом году 28 полей, а в висакосном - 29 ?
Это уже другой вопрос) Если я узнаю, как сделать условие для февраля, то, думаю, что висОкосный год не сделает мне проблемы(Y%4=0)
25 апр 13, 16:53    [14231341]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
Прогер_самоучка
Если я узнаю, как сделать условие для февраля,

Ну так узнайте. Как там в вашей теории по фразе where определяется количество полей в результате ?
25 апр 13, 16:55    [14231351]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из таблицы  [new]
Прогер_самоучка
Member

Откуда:
Сообщений: 68911
[quot Glory]
Прогер_самоучка
Как там в вашей теории по фразе where определяется количество полей в результате ?

Я сказал, что больше похоже. В идеале должно быть условие "если февраль, то", иначе. Но, как это "навесить"- загадка :)
25 апр 13, 17:04    [14231427]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из таблицы  [new]
iap
Member

Откуда: Москва
Сообщений: 47063
Прогер_самоучка
висОкосный год не сделает мне проблемы(Y%4=0)
Действительно, самоучка
2100-й год високосный?
25 апр 13, 17:05    [14231436]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из таблицы  [new]
Прогер_самоучка
Member

Откуда:
Сообщений: 68911
alexeyvg
Запрос нерабочий, он выводит набор случайных записей. Потому что запрос:
(select val from t2 where type='B16') as [B16]
Выведет случайную запись из t2, для которой выполняется условие type='B16'
Пока что там Null.
автор
если конечно type не является ключём этой таблицы.
Нет, не ключ. Ключ здесь только ID
25 апр 13, 17:06    [14231441]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
Прогер_самоучка
Но, как это "навесить"- загадка :)

Придумать свою базу. С блэкджеком и ... своей теорией.
25 апр 13, 17:08    [14231457]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из таблицы  [new]
Прогер_самоучка
Member

Откуда:
Сообщений: 68911
iap
Действительно, самоучка
2100-й год високосный?

Да. Скажите, нет?
25 апр 13, 17:10    [14231473]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из таблицы  [new]
iap
Member

Откуда: Москва
Сообщений: 47063
Прогер_самоучка
iap
Действительно, самоучка
2100-й год високосный?

Да. Скажите, нет?
Скажу нет!! :)
25 апр 13, 17:10    [14231477]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
Прогер_самоучка
iap
Действительно, самоучка
2100-й год високосный?

Да. Скажите, нет?

Вискосоный, високсоный.
По вашей теории.
25 апр 13, 17:11    [14231481]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из таблицы  [new]
Прогер_самоучка
Member

Откуда:
Сообщений: 68911
Glory
Придумать свою базу. С блэкджеком и ... своей теорией.
Оригинально)
25 апр 13, 17:12    [14231483]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из таблицы  [new]
iap
Member

Откуда: Москва
Сообщений: 47063
iap
Прогер_самоучка
пропущено...

Да. Скажите, нет?
Скажу нет!! :)
Почитайте это, например: http://www.astronet.ru/db/msg/1182321/node4.html#SECTION00421000000000000000
25 апр 13, 17:12    [14231488]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31822
Прогер_самоучка
alexeyvg
Запрос нерабочий, он выводит набор случайных записей. Потому что запрос:
(select val from t2 where type='B16') as [B16]
Выведет случайную запись из t2, для которой выполняется условие type='B16'
Пока что там Null.
Да хоть 515. Я говорю, что запрос выводит случайную запись, я не знаю, какое конкретно значение будет в этой записи, это же зависит от данных в таблицах.

Я так и не понял, что вам надо, но вряд ли вы пишете запросы для вывода случайных записей в произвольном порядке :-)
25 апр 13, 17:13    [14231494]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из таблицы  [new]
Прогер_самоучка
Member

Откуда:
Сообщений: 68911
iap
Скажу нет!! :)
Хорошо, хорошо. Одолели... Не учёл кратность 400...
25 апр 13, 17:16    [14231509]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из таблицы  [new]
Прогер_самоучка
Member

Откуда:
Сообщений: 68911
alexeyvg
Да хоть 515. Я говорю, что запрос выводит случайную запись, я не знаю, какое конкретно значение будет в этой записи, это же зависит от данных в таблицах.
Я так и не понял, что вам надо, но вряд ли вы пишете запросы для вывода случайных записей в произвольном порядке :-)

Понял вас. Вот так вроде бы будет правильней:
+
Select distinct

	t3.M, t3.Y,t2.ID_M, t3.BID, t3.SMID, 

	(select val from t2 where type='B1' and t3.id=t2.id_m) as [B1],
	(select val from t2 where type='E1' and t3.id=t2.id_m) as [E1],
	(select val from t2 where type='B2' and t3.id=t2.id_m) as [B2],
	(select val from t2 where type='E2' and t3.id=t2.id_m) as [E2],
	(select val from t2 where type='B3' and t3.id=t2.id_m) as [B3],
	(select val from t2 where type='E3' and t3.id=t2.id_m) as [E3],
	(select val from t2 where type='B4' and t3.id=t2.id_m) as [B4],
	(select val from t2 where type='E4' and t3.id=t2.id_m) as [E4],
	(select val from t2 where type='B5' and t3.id=t2.id_m) as [B5],
	(select val from t2 where type='E5' and t3.id=t2.id_m) as [E5],
	(select val from t2 where type='B6' and t3.id=t2.id_m) as [B6],
	(select val from t2 where type='E6' and t3.id=t2.id_m) as [E6],
	(select val from t2 where type='B7' and t3.id=t2.id_m) as [B7],
	(select val from t2 where type='E7' and t3.id=t2.id_m) as [E7],
	(select val from t2 where type='B8' and t3.id=t2.id_m) as [B8],
	(select val from t2 where type='E8' and t3.id=t2.id_m) as [E8],
	(select val from t2 where type='B9' and t3.id=t2.id_m) as [B9],
	(select val from t2 where type='E9' and t3.id=t2.id_m) as [E9],
	(select val from t2 where type='B10' and t3.id=t2.id_m) as [B10],
	(select val from t2 where type='E10' and t3.id=t2.id_m) as [E10],
	(select val from t2 where type='B11' and t3.id=t2.id_m) as [B11],
	(select val from t2 where type='E11' and t3.id=t2.id_m) as [E11],
	(select val from t2 where type='B12' and t3.id=t2.id_m) as [B12],
	(select val from t2 where type='E12' and t3.id=t2.id_m) as [E12],
	(select val from t2 where type='B13' and t3.id=t2.id_m) as [B13],
	(select val from t2 where type='E13' and t3.id=t2.id_m) as [E13],
	(select val from t2 where type='B14' and t3.id=t2.id_m) as [B14],
	(select val from t2 where type='E14' and t3.id=t2.id_m) as [E14],
	(select val from t2 where type='B15' and t3.id=t2.id_m) as [B15],
	(select val from t2 where type='E15' and t3.id=t2.id_m) as [E15],
	(select val from t2 where type='B16' and t3.id=t2.id_m) as [B16],
	(select val from t2 where type='E16' and t3.id=t2.id_m) as [E16],
	(select val from t2 where type='B17' and t3.id=t2.id_m) as [B17],
	(select val from t2 where type='E17' and t3.id=t2.id_m) as [E17],
	(select val from t2 where type='B18' and t3.id=t2.id_m) as [B18],
	(select val from t2 where type='E18' and t3.id=t2.id_m) as [E18],
	(select val from t2 where type='B19' and t3.id=t2.id_m) as [B19],
	(select val from t2 where type='E19' and t3.id=t2.id_m) as [E19],
	(select val from t2 where type='B20' and t3.id=t2.id_m) as [B20],
	(select val from t2 where type='E20' and t3.id=t2.id_m) as [B21],
	(select val from t2 where type='E21' and t3.id=t2.id_m) as [E21],
	(select val from t2 where type='B22' and t3.id=t2.id_m) as [B22],
	(select val from t2 where type='E22' and t3.id=t2.id_m) as [E22],
	(select val from t2 where type='B23' and t3.id=t2.id_m) as [B23],
	(select val from t2 where type='E23' and t3.id=t2.id_m) as [E23],
	(select val from t2 where type='B24' and t3.id=t2.id_m) as [B24],
	(select val from t2 where type='E24' and t3.id=t2.id_m) as [E24],
	(select val from t2 where type='B25' and t3.id=t2.id_m) as [B25],
	(select val from t2 where type='E25' and t3.id=t2.id_m) as [E25],
	(select val from t2 where type='B26' and t3.id=t2.id_m) as [B26],
	(select val from t2 where type='E26' and t3.id=t2.id_m) as [E26],
	(select val from t2 where type='B27' and t3.id=t2.id_m) as [B27],
	(select val from t2 where type='E27' and t3.id=t2.id_m) as [E27],
	(select val from t2 where type='B28' and t3.id=t2.id_m) as [B28],
	(select val from t2 where type='E28' and t3.id=t2.id_m) as [E28],
	(select val from t2 where type='B29' and t3.id=t2.id_m) as [B29],
	(select val from t2 where type='E29' and t3.id=t2.id_m) as [B29],
	(select val from t2 where type='B30' and t3.id=t2.id_m) as [B30],
	(select val from t2 where type='B30' and t3.id=t2.id_m) as [B30],
	(select val from t2 where type='B31' and t3.id=t2.id_m) as [B31],
	(select val from t2 where type='E31' and t3.id=t2.id_m) as [E31]

from t2, t3
where t3.Id=t2.id_m 
25 апр 13, 17:48    [14231691]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31822
Прогер_самоучка
Понял вас. Вот так вроде бы будет правильней:
Да, теперь ошибки нет.

Остаётся вопрос, почему нельзя использовать вместо этого запроса более простой, универсальный и быстрый:
Select t3.M, t3.Y,t2.ID_M, t3.BID, t3.SMID, t2.type, t2.val
from t2, t3
where t3.Id=t2.id_m 
Он же выведет те же самые данные?
25 апр 13, 18:17    [14231791]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить