2014-09-04 2 views
1

У меня есть таблица NVPairs следующимFOR XML PATH

create table NVPairs(
    ID int IDENTITY(1,1) NOT NULL, 
    Param_ID int NOT NULL, 
    Name varchar(32) NOT NULL, 
    Value sql_variant NULL 
) 

PARAM_ID Name Value 
1  n1 foo 
1  n2 123.123456789 

Я существующий запрос

SELECT Name, Value 
FROM NVPairs 
WHERE Param_ID = 1 
FOR XML PATH('Param'), TYPE 

Что дает

<Param> 
    <Name>n1</Name> 
    <Value>foo</Value> 
    <Name>n2</Name> 
    <Value>123.123456789</Value> 
</Param> 

Кто-нибудь знает, если или как Я могу выполнить функцию форматирования, такую ​​как ROUND() для значения, если имя соответствует определенным критериям. например Если Name = 'n2', то ROUND (значение, 7)?

Результат стал бы

PARAM_ID Name Value 
1  n1 foo 
1  n2 123.123456800 

ответ

0

Используйте CASE statement в вашем ЗЕЬЕСТ. Ваш ВЫБРАТЬ будет читать что-то вроде

SELECT 
    Name, 
    CASE WHEN Name='n2' THEN ROUND(Value,7) ELSE Value END AS Value 
... 

Edit: Вы, вероятно, придется сделать некоторые кастинг, чтобы бросить из sql_variant в десятичном или FLOAT прежде чем он сможет ТУРА, затем отливали/преобразовать его обратно.

+0

Работает как очарование! Огромное спасибо. –