powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / И мне, плиз, помогите с запросом1
2 сообщений из 2, страница 1 из 1
И мне, плиз, помогите с запросом1
    #32052610
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CREATE TABLE dbo.Logs (
ID int IDENTITY (1, 1) NOT NULL ,
DateLog smalldatetime NOT NULL ,
FileName varchar (255) NOT NULL
)

CREATE TABLE dbo.MaskINCopyer (
ID int IDENTITY (1, 1) NOT NULL ,
Mask varchar (12) NOT NULL
)

Logs содержит записи таким образом, что есть записи с совпадающими полями DateLog и FileName. Интерес представляют только записи с неповторяющимися именами файлов в пределах одной даты. Т.е. в выбоке могут быть записи с повторяющимися именами файлов, но с разными датами.

В таблице Mask лежат маски для этих файлов, под которые файлы либо подходят, либо нет.

Нужно выбрать все маски и количество файлов подходящих под эти маски. Если под маску не подходит ни один файл, то нужно вывести 0.

У меня получился такой монстр.

create table #a (DateLog char(8), FileName varchar(255))
INSERT #a select
distinct convert(char(4),datepart(year,DateLog))+convert(VARchar(2),datepart(month,DateLog))+convert(VARchar(2),datepart(day,DateLog)),
filename
FROM logs

SELECT Mask, 0 FROM MaskInCopyer
WHERE Mask NOT IN
(SELECT Mask FROM MaskInCopyer,#a WHERE FileName LIKE Mask)
UNION
SELECT Mask, count(FileName) FROM MaskInCopyer,#a WHERE FileName LIKE Mask GROUP BY Mask

Как все это упростить?:

1) Как избавиться от временной таблицы, т.е. можно ли все сделать одним запросом?
2) Как по другому можно сделать distinct convert(char(4),datepart(year,DateLog))+convert(VARchar(2),datepart(month,DateLog))+convert(VARchar(2),datepart(day,DateLog)),
т.е. как заменить это огромное выражение? distinct convert(varchar(3),datepart(dy,DateLog)) не пойдет, так как интервал дат не ограничивается одним годом.
...
Рейтинг: 0 / 0
И мне, плиз, помогите с запросом1
    #32052635
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT m.Mask, IsNull(t.c, 0 )  
FROM MaskInCopyer m LEFT JOIN
     (SELECT m.Mask,count(l.FileName) c
      FROM MaskInCopyer m,
           (SELECT DISTINCT convert(varchar,DateLog, 112 ) as d,filename FROM logs) l
      WHERE l.FileName LIKE m.Mask
      GROUP BY m.Mask) t
      ON m.Mask=t.Mask
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / И мне, плиз, помогите с запросом1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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