2013-09-10 4 views
1

У меня есть таблицамульти-заявление табличных значений функции высчитывает/дисплей проценты

UserName Question_ID Answer 
    Tom  Q001   D 
    Wendy  Q009   A 
    Eddy  Q089   C 
    David  Q001   C 
    Eve  Q001   D 
    Paul  Q001   A 
    Sam  Q001   B 
    Tom  Q002   B 
    Tom  Q003   C 

Я хочу создать мульти заявление, внесенное оцененный функцию.

Пусть Question_id в качестве входных данных, я хочу, чтобы создать таблицу показывает question_id, ответ, число ответов, а также процент ответов

Например (вход: Question_id = Q001)

Выход будет

Question_ID Answer Total Percentage 
    Q001   A  1  20 
    Q001   B  1  20 
    Q001   C  1  20 
    Q001   D  2  40 

Я создал функцию образец ниже:

create function [dbo].[QuestionFrequency] 
(
@question_id varchar(10)  
) 

Returns @frequency table (question_id varchar(10), answer varchar(10)) 
As 
begin 

insert @frequency (question_id, answer) 
select question_Id, Answer from questions where @question_id = Question_id 
return 
end 

Этот код не отображает меня ко мне?

У меня есть это, чтобы рассчитать проценты, но мой вопрос в том, как получить пользовательский ввод? для запуска функций?

ЭТО КОД:

создать таблицу [online_questionaire] (имя пользователя NCHAR (10) нулевой,
question_id NCHAR (20) нулевой, ответ NCHAR (20) нулевой,)

вставки в online_questionaire (имя пользователя, question_id, ответ) значения
('том', 'Q001', 'd'), ('Wendy', 'Q09', 'а'), ('вихретоковый', «q089 ',' c '), (' david ',' q001 ',' c '), ('eve', 'q001', 'd'), ('paul', 'q001', 'a'), ('sam', 'q001', 'b'); GO

создать функцию [DBO]. [QuestionFrequency] ( @question_id VARCHAR (10)
)

Returns @frequency table (question_id varchar(10), answer varchar(10)) 
As 
begin 

insert @frequency (question_id, answer) 
select question_Id, Answer from online_questionaire where @question_id = Question_id 
return 
end 

Go выберите q.Question_ID, q.Answer, количество () as Total, count () * 100/(выберите счет (*) из online_questionaire as t, где t.Question_ID = @question_id) в качестве [Процент] из online_questionaire as q , где q.Question_ID = @question_id группа по q.Question_ID, q.Answer

DECLARE @Question_ID УАКСНАК (64) = 'Q001'

SELECT * FROM QuestionFrequency (@Question_ID) КАК QF

+0

вы можете использовать для хранимой процедуры затем применить запрос – zxc

ответ

0

Это как вызвать функцию табличной у вас есть выше:

DECLARE @Question_ID VARCHAR(64) = 'Q001' 

SELECT * 
FROM QuestionFrequency(@Question_ID) AS qf 
+0

я получаю сообщение об ошибке Необходимо объявить скалярные переменный «@Ques tion_ID». , ссылаясь на счетчик (*) * 100/(выберите счетчик (*) из online_questionaire as t, где t.Question_ID = @question_id) в качестве [Процент] – james431

+0

Оглядываясь на ваш измененный вопрос, я немного смущен тем, что вы на самом деле пытаясь выполнить. Я думал, вы просто ищете, как назвать функцию, связанную с таблицей. Похоже, вы пытаетесь использовать «@question_id» в строке «from online_questionaire as t, где t.Question_ID = @question_id» перед объявлением переменной. Переместите мой элемент DECLARE «@Question_ID» прямо перед строкой «выберите q.Question_ID, q.Andswer, count() как Total». –

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