2014-02-12 3 views
0

В таблице 21 строка. 7 - на 2011 год, 7 - на 2012 год, а остальные 7 - на 2013 год. Я хочу получить 7-дневный 7-летний рекорд.Результаты SQL-запроса разные в разных средах

SELECT S1, S2, S1 * S2 AS M 
FROM BLGND 
WHERE DID = @dID AND 
     PMID = @pmID AND 
     yearr IN (SELECT MAX(yearr) AS y FROM BLGND AS BLGND_1) 

Я успешно приведу строки последнего года с запросом выше в среде MS Visual Studio. Но когда я запускаю запрос на странице ASP.NET, он приносит все 21 запись.

Иными словами, yearr IN (SELECT MAX(yearr) AS y FROM BLGND AS BLGND_1) не имеет значения. Тип

yearr столбца является int

Что может быть проблема? ИЛИ есть лучший запрос, который вы знаете?

+0

Почему положение, когда вы знаете, год, и вы ожидаете, что один год на поиск? Кстати, я думаю, что YEAR зарезервированное слово – Steve

+0

Что такое тип данных 'year'? Используется просто '[year] = (SELECT MAX ([year]) FROM BLGND)' make any diff – MikeSmithDev

+0

Вы должны были сделать некоторую ошибку при выполнении запроса из ASP.NET, это должно работать (хотя вы могли бы использовать '=' вместо 'IN' в том месте). Если запрос выполнен правильно, разница, вероятно, связана с настройками ANSI в отношении запроса, т.е. NULL и т. Д., Где значения по умолчанию могут отличаться для VS и ASP.NET. – Luaan

ответ

0

Вы могли бы просто написать

SELECT S1, S2, S1 * S2 AS M 
FROM BLGND 
WHERE DID = @dID AND 
     PMID = @pmID AND 
     YEAR([fieldWithDate]) = @yearRequested 

fieldWithDate Где предполагается быть smalldatetime или datetime поле, от которого вы хотите получить значение года и @yearRequested является параметром, который вы передаете на ваш запрос из кода ,
Вы могли бы извлечь значение года, используя функцию YEAR(expression) T-SQL

Конечно, если поле для поиска значения года только целое число, содержащего значение года ваших строк запроса проще

SELECT S1, S2, S1 * S2 AS M 
FROM BLGND 
WHERE DID = @dID AND 
     PMID = @pmID AND 
     fieldWithYearValue = @yearRequested 

Если вы не хотите, чтобы передать параметр в течение года, но просто хочу, чтобы получить всегда набор строк в прошлом году для конкретного пользователя затем

SELECT S1, S2, S1 * S2 AS M 
FROM BLGND 
WHERE DID = @dID AND 
     PMID = @pmID AND 
     fieldWithYearValue = (SELECT MAX(fieldWithYearValue) FROM BLGND) 
+0

yearr column - это 'int'. – zkanoca

+0

Лучше тогда не нужно использовать функцию YEAR, просто WHERE a = @param и param - это значение 2013 или 2012 или 2011 или любой другой год, который вы ищете – Steve

+0

Но каждый год некоторые пользователи могут вводить новые записи, которые я не могу управление – zkanoca

Смежные вопросы