我有一個時間表表,每個時間表必須有一個或多個關聯的標準。家長和孩子是這樣的:返回滿足條件的多行之間通用的列值
SchedId ScheduleName
1 ScheduleA
2 ScheduleB
3 ScheduleC
標準表:
CriteriaName CriteriaValue SchedId
color red 1
width wide 1
depth verydeep 1
color blue 2
density dense 3
height short 3
porosity spongy 3
現在,我有數據記錄,我需要確定正確的時間表。因爲我的查詢被限制在一個特定的域名中,所以我碰巧知道要測試哪個標準 - 換句話說,我知道我只對結果中有3個標準有興趣,並且我知道它們是顏色,寬度和深度。
一個典型的數據記錄集合可能看起來像:
Color Width Depth
--------------------------------------
red narrow shallow
red medium deep
blue wide verydeep
red wide verydeep
我也碰巧知道有1,並具有一組給定的已知條件值只有1時間表。那麼有什麼更容易?
概念我所需的查詢是這樣的:
SELECT color, width, depth, SchedId
FROM [...]
和正確的返回一行是:
red wide verydeep 1
我使用的答案,類似的問題在這裏得到所需SchedId在至少有兩種不同的方法 - JOINing在條件表上爲每個條件集(criterianame = color,criteriavalue = red)選擇,加入SchedId,要求所有返回行的SchedId相同。這是有效的,因爲我在查詢中使用了文字值。
我無法找到任何方法,在一個普通的查詢(無sproc)中獲取我的數據行的值到JOIN子查詢中用於比較。
我過去爲這個確切問題使用的另一種技術是我試圖避免的 - 我基於每個SchedId的標準計算匹配次數。如果給定SchedId的匹配數等於該Id的標準數,那麼它是正確的Sched。我並不十分在意這種方法,儘管它的工作還行。這種技術與MySQL一起使用,但我現在正在使用T-SQL。
最後,我通過這種方式設計了標準表,允許無限數量的標準,以及無限數量的時間表的無限種標準。它已被證明是非常具有挑戰性的。想法?
我想你想執行動態交叉表查詢。這在SQL Server中並不容易,但[可以](http://www.sommarskog.se/dynamic_sql.html#Crosstab)。 – Mike 2014-11-14 23:51:46