글쎄, 나는 더 깊이 SQL을 배우고 있기 때문에 나 자신을위한 연습 문제로 해결하려고 노력했다. 나는 주어진 스키마의 문제점들이 내가 그것에 대해 아무 말도하지 않을 정도로 잘 문서화되어 있다고 생각한다.
이 코드를 작동 시키려면 소스 데이터의 열이 물리적 인 열이어야합니다 (즉, 테이블 변수 또는보기의 열이 아님). 가방과 신발 이외의 다른 유형이있는 경우이 코드를 함수와 기타 등등으로 추상화 할 수 있습니다. 알고리듬을 쓰고 싶었습니다. 이것이 제대로 작동하기위한 다른 많은 경고가 있지만, 언급 한 바와 같이, 비정규 화 된 데이터는 완전한 경고 세트를 가지고 있습니다.
그래서 여기에 우리가 간다 :
편집 : 버전 2. 감사 마틴이 함께 도와. 그건 정말 깔끔한 트릭이지만 사용하는 것은 드문 일입니다.
필자는 열 이름이 검색 패턴과 일치한다고 가정합니다 (충분히 하드 코딩되었으므로 귀찮은 확인이 필요합니다).
DECLARE @sql nvarchar(max)
SET @sql = 'SELECT Period, '
-- Build column sum for bags
DECLARE @bagsColumns nvarchar(max)
SELECT
@bagsColumns = COALESCE(@bagsColumns + '+', N'') + '[' + COLUMN_NAME + ']'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'SumTest' AND COLUMN_NAME LIKE '%bags%'
SET @sql = @sql + @bagsColumns + ' AS ''Sum of Bags'', '
-- Build column sum for shoes
DECLARE @shoesColumns nvarchar(max)
SELECT
@shoesColumns = COALESCE(@shoesColumns + '+', N'') + '[' + COLUMN_NAME + ']'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'SumTest' AND COLUMN_NAME LIKE '%shoes%'
SET @sql = @sql + @shoesColumns + ' AS ''Sum of Shoes'''
SET @sql = @sql + ' FROM SumTest'
EXEC(@sql)
왜 테이블이 이렇게 구조화되어 있는지 말해 줄 수 있습니까? –
"브랜드 A"가 "브랜드 Z"로 변경되는 것과 같이 브랜드의 이름이 변경되면 어떻게됩니까? "Shoes"를 "Dress Shoes"와 "Athletic Shoes"로 나누어야 할 경우 어떻게됩니까? – Thomas
다른 응용 프로그램에서 가져오고 읽을 수 있도록이 구조의 데이터가 필요합니다. 제한 사항을 실현했습니다. 그래서 구조를 변경하고 나중에 SQL에서 그것을 바꿀 것입니다 – marilyn