2010-11-15 2 views
0

рассмотрим следующую таблицуSQL 2000 Проблема запроса

create table sample(id, name, numeric, qno, ans1,ans2,ans3) 

sample data 

1, 'vivek', 1, 'a', 'b', '' 
2, 'vivek', 1, 'c', 'd', '' 
3, 'vivek', 2, 'e', 'f', 'g' 
4, 'vivek', 3, 'h', 'i', 'j' 
5, 'vijay', 1, 'k', '', 'l' 
6, 'vijay', 2, 'm', '', 'n' 
7, 'vijay', 2, 'o', '', 'p' 
8, 'vikram', 3, 'q', 'r', 's' 


output expected 

column Names: name, info1, info2, info3 

    values 
'vivek','ab','ef','hij' 
'vivek','cd','','' 
'vijay','kl', 'mn','' 
'vijay','','op','' 
'vikram','','','qrs' 

Преобразование строки в столбцы.

другими словами. один ответ будет иметь один ряд. может быть несколько ответов на один вопрос.

вывод должен иметь номера ответов в виде столбцов.

Есть ли какая-либо быстрая и простая техника в sql 2000?

+0

Что критерии? Например, почему abc, abc пропустили? – pavanred

+0

извините за замешательство. Я редактировал вопрос. –

+0

@Vivek - Вопрос и ожидаемый ответ по-прежнему не имеют четкого смысла. Можете ли вы правильно просмотреть свой вопрос и отредактировать его. –

ответ

2

Во-первых, если я понимаю вашу проблему, то я думаю, что ваш первый результат должен быть «Вивек», «AB», «EFG» , 'hij', а не 'vivek', 'ab', 'ef', 'hij'

Если да, то я думаю, что следующее может делать то, что вы хотите.

IF OBJECT_ID('TempDB..#TempSample') IS NOT NULL 
    DROP TABLE #TempSample 

DECLARE @PrevName nvarchar(80), 
@PrevRow_number  INT, 
@PrevQno int 


select 
    isNull(id, 0) as id , 
    isNull(sname, '') as sName , 
    IsNull(qno,0)  as qno , 
    ans1, 
    ans2, 
    ans3 , 
    CAST(0 AS INT) AS row_number , 
    Cast('' as Nvarchar(80)) as newAns1, 
    Cast('' as Nvarchar(80)) as newAns2, 
    Cast('' as Nvarchar(80)) as newAns3 
    INTO #TempSample 
    from 
    (select id, sname, qno, ans1, ans2, ans3 from sample) t3 


ALTER TABLE #TempSample ADD PRIMARY KEY CLUSTERED (sName, qno , id) 

UPDATE #TempSample 
    SET @PrevRow_number = row_number = CASE WHEN sName = @PrevName and qno = @PrevQno THEN @PrevRow_number +1 ELSE 1 END, 
     @PrevName = sname , 
     @PrevQno = qno, 
     newAns1      = case when sName = @PrevName and qno=1 Then newAns1 + ans1+ans2+ans3 else newAns1 end , 
     newAns2      = case when sName = @PrevName and qno=2 Then newAns2 + ans1+ans2+ans3 else newAns2 end , 
     newAns3      = case when sName = @PrevName and qno=3 Then newAns3 + ans1+ans2+ans3 else newAns3 end 
FROM #TempSample WITH(TABLOCKX) 
OPTION (MAXDOP 1) 


Select sName, Max(newAns1) as Ans1 , Max(newAns2) as Ans2, Max(newAns3) as Ans3 
From #TempSample 
Group by sName, Row_Number 
Order By sName 

была аналогичная проблема с Sql 2000 в последнее время, так что кредит должен пойти на this article SqlServerCentral

+0

спасибо. вы правы насчет результата –

+0

Тогда примите его ответ. –

+0

Выполнено ............. –

0

Нет, нет простой способ создать стержень в SQL 2000.

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