【发布时间】:2015-02-13 00:37:45
【问题描述】:
我研究这个查询已经有一段时间了。我刚刚获得了部分解决方案,现在尝试将该查询添加到我的大查询中,但查询的输出出现了一些问题。
SELECT T1.[miles],
T2.[name],
T2.[code],
T2.[routesid],
T2.[id],
T2.[company],
T2.[contract],
T2.[supplier],
T3.[tons],
CASE
WHEN T4.miles IS NULL THEN T5.miles
ELSE T4.miles
END MILES2,
CASE
WHEN T4.miles = T1.miles
AND T4.miles != 9999 THEN T4.flatrate
ELSE T5.rate
END AS RATE,
T3.[change]
FROM ((table1 AS T1
JOIN table2 AS T2
ON T1.[company] = T2.[company]
AND T1.[id] = T2.[routesid])
JOIN table3 AS T3
ON T1.[company] = T3.[code])
LEFT JOIN table4 AS T4
ON T1.[company] = T4.[code]
AND ( T1.[miles] = T4.[miles] )
INNER JOIN (SELECT TOP 1 code,
miles,
rate,
flatrate
FROM table4
WHERE miles = 9999
AND active = 1) AS T5
ON T1.[company] = T5.[code]
WHERE T2.[active] = 1
AND T2.[expiration] < '02/10/2015'
AND T1.[miles] > 0
AND T1.[company] = 'COMPANY'
AND T3.[active] = 1;
我知道这是一个很大的问题。我试图弄清楚为什么它忽略了与表 4 上与 9999 配对的里程配对的数字。打印这些数字没有问题。
MILES NAME CODE ROUTESID ID COMPANY CONTACT SUPPLIER TONS MILES2 CHANGE
140 N/A N/A 3425 185 ILLINI TARIFF 1 N/A 24 140 Weekly
144 N/A N/A 4532 198 ILLINI TARIFF 3 N/A 24 144 Weekly
9999 N/A N/A 2134 150 ILLINI TARIFF 2 N/A 24 9999 Weekly
如果它与下面的这种情况相匹配,它现在不会打印出来。我从之前的堆栈溢出中得到了 SQL 语句,如果 Miles 和 Miles2 不匹配,我得到了要打印的 SQL 语句,但是由于我将 SQL 加在一起,它就停止了工作。
MILES NAME CODE ROUTESID ID COMPANY CONTACT SUPPLIER TONS MILES2 CHANGE
140 N/A N/A 3420 170 ILLINI TARIFF 4 N/A 24 9999 Weekly
Here is a demo of the issue 如您所见,未显示 TABLE1 中的 250、300、350、400、450 和 500。
【问题讨论】:
-
您有实际问题吗?
-
1) 将代码格式化为人类可读的格式将大大有助于人类阅读和理解它。 2) 您能否更具体地说明您面临的问题?
-
你在开玩笑吗?这甚至不可读。
-
嗯,你的问题很可能是你加入了来自 table4 的
TOP 1(而不是ORDER BY),这意味着你总是加入一个特定的行 -
这真的不是一个大问题。但是,仅通过查询就很难弄清楚您在做什么。
标签: sql sql-server