ID | q1 | q2 | q3 | q4 | q5 | q6 |
kim | 1 | 3 | 5 | 2 | 3 | 3 |
칼럼이 ID, q1-q6 까지 구요
거기에 insert 를 해서 id 와 1부터 5사이의 값들을 임시로 넣어뒀습니다.
SELECT 문을 통해서 kim 이 가지고있는 1이 몇개인지 카운트 하고싶습니다.... 가로로 검색하려 하는데 어떻게 해야 할까요 ?. ...
예를 들어 위에 있는 값에선
SELECT 조건을 해 1이 몇개인지 찾아낸 결과는 1 이 나오고
1말고 3이 몇개인지 카운트 한다면 3이 q2, q5, q6에 있으니 3 이 나오게 하려고 합니다.... 도와주세요!!!
Comment 5
-
바이블
2017.06.18 18:55
-
노갱2
2017.06.19 13:48
-- 1. 테이블 변수 생성
DECLARE @TABLETEMP TABLE(
ID VARCHAR(50)
,Q1 INT
,Q2 INT
,Q3 INT
,Q4 INT
,Q5 INT
,Q6 INT
)-- 2. 데이터 INSERT
INSERT INTO @TABLETEMP VALUES('KIM',1,3,5,2,3,3)
-- 3. UNPIVOT 데이터 조회
SELECT COUNT(CASE WHEN VALUE = '3' THEN 1 END) AS COUNT3 -- 3 개수
, COUNT(CASE WHEN VALUE = '1' THEN 1 END) AS COUNT1 -- 1 개수
FROM
(SELECT *
FROM @TABLETEMP) P
UNPIVOT
( VALUE FOR COL IN
(Q1, Q2, Q3, Q4, Q5)
)AS UNPVT -
Terry
2017.06.19 10:13
컬럼 개수가 고정이시라면
하기처럼 무식하게 하셔도 될 듯 합니다.
;with tblA(ID,q1,q2,q3,q4,q5,q6) As
(
Select 'kim'
,1
,3
,5
,2
,3
,3
)
,tblB(ID,data,col_nm) As
(
Select a.ID
,a.q1
,'q1'
From tblA a
Union All
Select a.ID
,a.q2
,'q2'
From tblA a
Union All
Select a.ID
,a.q3
,'q3'
From tblA a
Union All
Select a.ID
,a.q4
,'q4'
From tblA a
Union All
Select a.ID
,a.q5
,'q5'
From tblA a
Union All
Select a.ID
,a.q6
,'q6'
From tblA a
)
Select Count(1)
From tblB a
Where a.ID = 'kim'
And a.data = 1
-
자리비움
2017.06.19 12:48
declare @t table (id varchar(max), q1 int, q2 int, q3 int, q4 int, q5 int, q6 int)
insert into @t values ('kim', 1, 3, 4, 2, 3, 3)
declare @id varchar(max) = 'kim'
, @value int = 1
--, @value int = 3
select sum_value = sum(q1 + q2 + q3 + q4 + q5 + q6)
from (
select q1 = (case when q1 = @value then 1 else 0 end)
, q2 = (case when q2 = @value then 1 else 0 end)
, q3 = (case when q3 = @value then 1 else 0 end)
, q4 = (case when q4 = @value then 1 else 0 end)
, q5 = (case when q5 = @value then 1 else 0 end)
, q6 = (case when q6 = @value then 1 else 0 end)
from @t
where id = @id
) as a
-
이재학_302349
2017.06.19 16:14
XOR와 sign 함수를 이용하는 것은 어떨까요?declare @t table (id varchar(max), q1 int, q2 int, q3 int, q4 int, q5 int, q6 int)insert into @t values ('kim', 1, 3, 4, 2, 3, 3)declare @p intset @p = 3 --찾으려는 수가 3이면..select-abs(sign(q1^@p)) -abs(sign(q2^@p)) -abs(sign(q3^@p)) -abs(sign(q4^@p)) -abs(sign(q5^@p)) -abs(sign(q6^@p)) + 6from @t a
unpivot 쓰고 카운트 하면 될것 같은데 ....
SQL Developer 툴로 사용하는데요 ... 예제로 좀 해주세요 ;;;
ㅜㅡ