私がおっと、あなたのポイントを誤解しそうです。情報を別のテーブルに移行していますか?
しかし、最初に、用語の標準化
First Normal Form
- Eliminate repeating groups in individual tables.
- Create a separate table for each set of related data.
- Identify each set of related data with a primary key.
の私の使用に関する注意だから明確に、私は正規化について間違っていました。 良いこと まだ若いですか? :/
私はこれを再評価するのに(致命的な間違いはありませんか?)、またSQL Server 2000
の制限があります。 redware - SQL SERVER Handbookで入手できるSQL Server 2000マニュアルの便利なコンパイルが見つかりました。
テーブル式については、表示されるのはsubqueries
とviews
ですが、本当のランキング機能はありません(ありがたいことに、Functions
を作成できます)。
の場合はに何らかの筆記体で値を追加するのはなぜですか?
- あなたはまだピボットを解除するテーブルに少なくともN X #Columnsを解析しようとしています。複雑なピボットは存在しませんでした。
- 高価な筆記体を使用する代わりに、
SELECT
'C1'はシンプルで行に対して簡単に変更できます。
- テーブルを連結したいので、最も簡単な方法はまだ
UNION ALL
です。
- 連結後にGROUP BYを1回実行することができます。シンプルでエレガント。
SOLUTION:
SELECT memID
, Col
, SUM(C1) AS Count
FROM (
SELECT 'C1' AS [Col], memID, C1 FROM #Test2
UNION ALL SELECT 'C2' AS [Col], memID, C2 FROM #Test2
UNION ALL SELECT 'C3' AS [Col], memID, C3 FROM #Test2
UNION ALL SELECT 'C4' AS [Col], memID, C4 FROM #Test2
UNION ALL SELECT 'C5' AS [Col], memID, C5 FROM #Test2) AS A
GROUP BY memID, Col
ORDER BY memID ASC, Col ASC
ソース表:
CREATE TABLE #Test2 (memID INT, C1 INT, C2 INT, C3 INT, C4 INT, C5 INT)
INSERT INTO #Test2 (memId, C1, C2, C3, C4, C5)
VALUES (123, 10, 20, 0, 40, 0)
, (123, 0, 20, 0, 40, 5)
, (122, 5, 20, 10, 15, 0)
, (122, 5, 0, 0, 0, 60)
, (155, 10, 0, 0, 10, 10)
, (155, 0, 0, 0, 50, 50)
結果:
memID Col Count
122 C1 10
122 C2 20
122 C3 10
122 C4 15
122 C5 60
123 C1 10
123 C2 40
123 C3 0
123 C4 80
123 C5 5
155 C1 10
155 C2 0
155 C3 0
155 C4 60
155 C5 60
私はあなたの最初の考えが正しいと思います。 乾杯。
ピボット.....を使用していますか? –
SQL 2000のデータベースとアンピボットがサポートされていないようです –
人はまだSQL2000を使用していますか?私のお悔やみ... – DavidG