저는이 솔루션에 대해 나 자신이 직접 솔루션을 제안하려고했지만 이것이 생각했던 것보다 약간 더 어려워졌습니다.조건부 여기서; SQLServer2008 용 Sql 쿼리/TSql
정보를 검색하려고하는 표는 다음과 같은 간단한 형태로 표시됩니다.
테이블 : CarFeatures SSRS를 보고서에
+---+---+---+---+-----+
|Car|Nav|Bth|Eco|Radio|
+---+---+---+---+-----+
|a |y |n |n |y |
+---+---+---+---+-----+
|b |n |y |n |n |
+---+---+---+---+-----+
|c |n |n |y |n |
+---+---+---+---+-----+
|d |n |y |y |n |
+---+---+---+---+-----+
|e |y |n |n |n |
+---+---+---+---+-----+
, 나는 주어진 매개 변수의 모든 기능을 가지고 있습니다 모든 자동차를 표시해야합니다. 그러면 Nav-yes/no, Bth-yes/no, Eco-yes/no, Radio-yes/no와 같은 보고서의 매개 변수가 수신됩니다.
예를 들어 매개 변수 입력이 네비게이션의 경우 '예'이고 다른 사람의 경우 '아니오'인 경우 결과 테이블은 다음과 같아야합니다.
+---+----------+
|Car|Features |
+---+----------+
|a |Nav, Radio|
+---+----------+
|e |Nav |
+---+----------+
나는 이것이 간단 할 것이라고 생각했지만, 쿼리를 완료하려고 시도 할 때, 이것은 나를 미치게 만든다. 아래는 내가 처음에 필요로하는 것을 얻을 것이라고 생각했던 것이지만 그렇지 않다. 있는 모든 매개 변수에 대한 행이있는 경우
select Car,
case when @nav = 'y' then 'Nav ' else '' end +
case when @bth = 'y' then 'Bth ' else '' end +
case when @eco = 'y' then 'Eco ' else '' end +
case when @radio = 'y' then 'Radio ' else '' end As Features
from CarFeatures
where (nav = @nav -- here I don't want the row to be picked if the input is 'n'
or bth = @bth
or eco = @eco
or radio = @radio)
은 기본적으로 논리는, 같은 것을해야한다 '예'매개 변수가 '아니오'에도 불구하고, '예'그 행으로 나에게 모든 기능을 나열 그 다른 기능들.
또한 보고서를 필터링 할 생각도 없습니다. 나는 이것을 저장 proc 자체에 있기를 원한다.
필자는 4 개의 매개 변수와 4 개의 순열을 고려할 때 ifs를 여러 번 피하는 것이 좋을 것입니다.
감사합니다.
, 당신이 원하는대로 쿼리 문자열을 구축하고 EXEC-경우 else' 절차는 @SQL의 NVARCHAR (max)를 선언 할 수 – Milen
저장 논리 당신은 '사용할 수 있습니다 (@SQL)를 임시 테이블에 저장하거나 호출자에게 다시 보냅니다. FOR XML 사용법을 볼 수도 있습니다. 이 방법을 사용하면 자동차 기능을 하나의 열에 연결하고 다른 자동차는 자동차에 연결할 수 있습니다. – Pierre
이것은 비정규 화 된 데이터 문제에 대한 것입니다. – Jodrell