Да, это возможно. Это сделает это. Скажем, у нас есть перечисление
public enum MyEnum
{
[Description("MyEnum1 Description")]
MyEnum1,
[Description("MyEnum2 Description")]
MyEnum2,
[Description("MyEnum3 Description")]
MyEnum3
}
. Тогда мы можем использовать ObjectDataProvider как
xmlns:MyEnumerations="clr-namespace:MyEnumerations"
<ObjectDataProvider MethodName="GetValues"
ObjectType="{x:Type sys:Enum}"
x:Key="MyEnumValues">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="MyEnumerations:MyEnum" />
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
. И для ListBox мы устанавливаем ItemSource в MyEnumValues и применяем ItemTemplate с Конвертер.
<ListBox Name="c_myListBox" SelectedIndex="0" Margin="8"
ItemsSource="{Binding Source={StaticResource MyEnumValues}}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource EnumDescriptionConverter}}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
И в конвертере мы получаем описание и возвращаем его
public class EnumDescriptionConverter : IValueConverter
{
private string GetEnumDescription(Enum enumObj)
{
FieldInfo fieldInfo = enumObj.GetType().GetField(enumObj.ToString());
object[] attribArray = fieldInfo.GetCustomAttributes(false);
if (attribArray.Length == 0)
{
return enumObj.ToString();
}
else
{
DescriptionAttribute attrib = attribArray[0] as DescriptionAttribute;
return attrib.Description;
}
}
object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
Enum myEnum = (Enum)value;
string description = GetEnumDescription(myEnum);
return description;
}
object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return string.Empty;
}
}
Метод GetEnumDescription, вероятно, должен идти куда-то еще, но вы получаете идею:)
Вы можете просто сделать:
select type, avg(case when value in (1, 2) then 1.0 else 0 end)
from table1
where code = 'Q2'
group by type;
Вот оно:
select type, cnt_value/sum_value as score
FROM (
SELECT type, count (value) as cnt_value , sum (value) as sum_value
FROM Table1
WHERE
CODE = 'Q2' AND
VALUE in (1,2)
GROUP by type
)
Несколько способов сделать это.
Проблема с вашим запросом заключается в том, что вы не выполнили второй шаг - получили ИТОГО количество ответов за Q2.
Вот мой SQLFiddle: http://www.sqlfiddle.com/#!9/898b3f/7
SELECT TYPE,
COUNT(VALUE),
(select count(*) from table1 where code = 'Q2') ,
COUNT(VALUE) / (select count(*) from table1 where code = 'Q2') as score
FROM Table1
where
CODE = 'Q2' AND
VALUE in (1,2)
GROUP BY TYPE