2011-12-09 2 views
1

나는 테이블과 같이 있습니다 단일 행의 값을 계산하는 방법은 무엇입니까?

| ID | X1 | X2 | X3 | .. | Xn | 
    +----+----+----+----+----+----+ 
    | 1 | x | '' | x | '' | '' | 
    +----+----+----+----+----+----+ 
    | 2 | '' | '' | x | '' | '' | 
    +----+----+----+----+----+----+ 
    | 3 | x | x | x | '' | x | 
    +----+----+----+----+----+----+ 
'' = Empty string, not null 

지금 내가 행 2 또는 3 또는 n에 얼마나 많은 'x'를 알고 싶어합니다. 이것을 달성하기위한 쉬운 방법이 있습니까? 이런 방식으로 데이터를 저장하지 마십시오 MS SQL 서버 2008

+0

RDBMS이가 무엇 –

+1

이 숙제인가 : 그럼 당신은 뭔가를 할 수 있습니까? 숙제처럼 보입니다. 지금까지 시도한 것을 알려주십시오. –

+2

나는 31 세이며 숙제를 더 이상하지 않는다. ;) SQL에 익숙해지고 스스로 연습 한 연습을하려고합니다. 사실 저는 간단한 Tic-Tac-Toe 게임을 만들고 X를 연속으로 계산하려고합니다. (그래서 실제로 Xn은 n> 3이 될 수 없지만 매 열마다 선택하지 않고 솔루션을 원했습니다.) - 질문에 데이터베이스를 추가했습니다. – Feroc

답변

3
SELECT ID, 
     (SELECT COUNT(*) 
     FROM (VALUES (X1), 
         (X2), 
         (X3), 
         /* ... */ 
         (Xn)) T(X) 
     WHERE X = 'X') AS Num 
FROM YourTable 
+0

모든 단일 열을 쓰고 싶지 않은 경우 동적 SQL을 사용하는 것이 가장 좋습니다. 난 그냥 while 루프를 만들고 모든 x 열을 SQL 문자열에 추가합니다. 아니면 더 좋은 방법이 있을까요? – Feroc

+1

@Feroc - 동적 SQL을 사용하여 모든 열을 포함하는 쿼리를 생성 할 수도 있고, 각 값을'ID, Index, Value '열이있는 테이블의 자체 행에 저장하도록 구조 조정을 고려할 수도 있습니다. –

+0

기둥; 당신이 SQL로 그것을하고 있다면 선택의 여지가 없습니다. –

1

를 사용

. 대신 XCoord, YCoord, Value 테이블에 저장하십시오. (? 및 버전)

SELECT  XCoord, COUNT(Value) AS XTotal 
FROM   TicTacTable 
WHERE  (Value = 'x') 
GROUP BY XCoord 
+0

경기장이 SQL 데이터베이스 외부에있을 경우이 작업을 수행하지만,이 경우 게임은 데이터베이스에서 직접 재생됩니다. – Feroc

관련 문제