2014-01-08 1 views
1

Параметры - несколько значений для одной метки - возможно ли это?Возможно ли иметь несколько значений для метки ONE в запросах, не запрашиваемых в SSRS 2005?

Возможно ли иметь несколько значений для метки ONE в одной строке в некотором запрошенном значении параметра, , так что я могу иметь ОДИН ЭТАБ в раскрывающемся списке для нескольких значений.

В принципе, если я пишу одно значение для каждой метки, тогда он отлично работает, но проблема в том, что когда я запускаю отчет, он показывает мне флажок для каждого имени. Для пользователя не очень удобно указывать и выбирать все значения для сайта-1, например, девять или десять значений. Где в идеале должна быть одна метка и несколько значений (которые я хочу).

работает отлично: (Но это привести длинный список в раскрывающемся меню, так как я больше значения для сайта-1, который я не хочу)

Label    Value 
--------------------------- 
Site-1     150 
Site-1     151 
Site-1     152 
Site-1     160 
Site-2     161 
Site-2     162 

и в запросе ColumnName IN (@Site) работает тоже хорошо.

Требуемый результат (в одной строке, так что ниспадающее меню должно дать только две метки)

Label    Value 
--------------------------- 
Site-1     150,151,152,160 
Site-2     161,162 

который принесет одну метку и связанную с многозначным в выпадающем или поле со списком, а в запросе ColumnName IN (@Site) ДЕЛАЕТ Не работа.

Извините. Сайт - это имя столбца в базе данных, а @Site - это имя переменной.

Сайт-1 & Сайт-2 - это названия меток для выпадающего меню.

+0

Спасибо Кеном Уайту за редактирование. Надеюсь, я буду постепенно учиться, как точно писать. Cheers –

ответ

0

Основная проблема заключается в том, что ваша база данных видит ваши значения, разделенные запятыми, как обычную строку, когда вы передаете ее в качестве параметра, поэтому она не знает, что делать с '150,151,152,160', когда она ожидает int.

Хороший общий способ справиться с этим заключается в создании функции, учитывающей таблицу, которая возвращает таблицу, когда вы передаете строку, разделенную запятыми. Самый простой способ я нашел Erland Sommarskog's Arrays and Lists in SQL Server:

CREATE FUNCTION split_csv (@list nvarchar(MAX)) 
    RETURNS @tbl TABLE (number int NOT NULL) AS 
BEGIN 
    DECLARE @pos  int, 
      @nextpos int, 
      @valuelen int 

    SELECT @pos = 0, @nextpos = 1 

    WHILE @nextpos > 0 
    BEGIN 
     SELECT @nextpos = charindex(',', @list, @pos + 1) 
     SELECT @valuelen = CASE WHEN @nextpos > 0 
           THEN @nextpos 
           ELSE len(@list) + 1 
         END - @pos - 1 
     INSERT @tbl (number) 
     VALUES (convert(int, substring(@list, @pos + 1, @valuelen))) 
     SELECT @pos = @nextpos 
    END 
    RETURN 
END 

Затем с помощью описанной выше функции, эта строка в запросе становится:

ColumnName IN (SELECT number FROM split_csv(@Site)) 

Если вы используете SQL Server 2008+, вы можете использовать таблицу -значные параметры, которые еще проще. Я расскажу вам о том же Erland Sommarskog site для получения информации об этом.

+0

спасибо за ваш ответ !! но я просто нашел альтернативу этой проблеме, используя функцию SPLIT(). Его работа прекрасна. Я чувствую себя на луне сейчас :) –

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