因此,我不太确定该怎么写,我在专业环境中使用SQL还是比较陌生,但我希望我能清楚地理解。首先,我的数据如下:
+--------+-----------+-------------+------------------+
| LandID | LandUnits | LandLineNum | TaxableLandValue |
+--------+-----------+-------------+------------------+
| 36512 | 19 | 6 | 8129 |
| 36513 | 25 | 4 | 20638 |
| 36514 | 5 | 3 | 18484 |
| 36515 | 95 | 5 | 78530 |
| 36516 | 73 | 2 | 260560 |
| 36517 | 1 | 1 | 20528 |
| 36518 | 25 | 104 | 6500 |
| 36519 | 73 | 102 | 57541 |
| 36520 | 1 | 101 | 20528 |
| 36521 | 19 | 106 | 1281 |
| 36522 | 95 | 105 | 19977 |
| 36523 | 5 | 103 | 3068 |
+--------+-----------+-------------+------------------+
这些LandID
部分均由另一个表中的单个PropertyID
关联-通过桥表(PropertyToLand
)引用。因此,基本上,这12条记录与同一个财产所有者相关,构成一个人拥有的6块土地。如果仔细查看这些数据,您会发现LineNum
1-6与它们各自在LandUnit
101-106上的LineNum
计数对齐,但是TaxableLandValue
是这些记录之间有差异。
不要问我为什么要用这种方式建立表格,但是基本上,我需要从TaxableLandValues
1-6中的LineNum
中获取SSRS报告中的一个字段,并从TaxableLandValues
中获得LineNum
101-106表示不修改表格的其他字段。
当前,我在存储过程中的SELECT TaxableLandValue
成功地获取了1-6的值,而我一直在根据另一列ZoningID
(位于101-106条记录,否则将全部12条记录添加到报告中。
基本上,我需要找出将NULL
1与LineNum
101进行连接的最佳方法,以此类推,这样才能隔离出不同的LineNum
结果。
我当前的SQL过程创建了一个包含15列的表,我将尝试压缩代码以显示问题。
TaxableLandValue
我尝试了多种方法,其中包括删除ALTER PROCEDURE rpt_LandData
@PropertyID INT
CREATE TABLE #temp (
LandID VARCHAR(50),
LandUnits INT,
LandLineNum INT,
TaxableLandValue VARCHAR(50),
TaxableUseValue VARCHAR(50))
INSERT INTO #temp(
l.LandID AS LandId,
l.LandUnits AS LandUnits,
l.LandLineNum AS LandLineNum,
l.TaxableLandValue AS TaxableLandValue,
l.TaxableLandValue AS TaxableUseValue)
FROM t_Land l
INNER JOIN t_PropertyToLand ptl ON l.LandID=ptl.LandID
INNER JOIN t_Property p ON ptl.PropertyID=p.PropertyID
WHERE ptl.PropertyID = @PropertyID AND l.ZoningID IS NOT NULL
SELECT * FROM #temp
ORDER BY CASE WHEN LandLineNum IS NULL THEN 1 ELSE 0 END, LandLineNum ASC
上的过滤器,而改为使用ZoningID
,但这使我难以解决。
我的预期结果如下:
(SELECT TaxableLandValue FROM t_Land WHERE ZoningID IS NULL) AS TaxableUseValue
在此先感谢您的帮助,如果需要更多信息,请告诉我。 抱歉,如果重复的话,但是我找不到任何相关问题。
答案 0 :(得分:1)
作为我评论中建议的示例,您可以在FROM子句中执行以下操作:
(根据评论编辑)
...
FROM t_Land l
INNER JOIN t_Land u ON l.LandID=u.LandID AND l.LandLineNum = u.LandLineNum - 100
{This may require TWO joins to t_PropertyToLand, I can't say since you haven't shared your full table structure}
...
然后l.TaxableLandValue
将具有您的土地价值,而u.TaxableLandValue
将具有您的使用价值。
您必须包含一些过滤器,以防止linenum
结果中超过l
的{{1}}被计数。
答案 1 :(得分:0)
我非常感谢@TabAlleman的帮助,由于他的投入,我能够解决我的问题,尽管给出的答案并非我正在寻找的解决方案。通过在t_Land
上将LandLineNum - 100
与其自身连接,我能够找到正确的答案,而且还必须验证所调用的参数是否与正在连接的两个t_Property
表相匹配。
SELECT l.LandID AS LandID,
l.LandLineNum AS LineNum,
l.LandValueTaxable AS TaxValues,
la.LandLineNumber AS LineNum2,
la.LandValueTaxable AS UseValues
FROM t_Land l
LEFT JOIN t_Land la ON l.LandLineNum = la.LandLineNum - 100
LEFT JOIN t_PropertyToLand prl ON l.LandID = prl.LandID
LEFT JOIN t_Property pr ON prl.PropertyID = pr.PropertyID
LEFT JOIN t_PropertyToLand prl2 ON la.LandID = prl2.LandID
LEFT JOIN t_Property pr2 ON prl2.Property_ID = pr2.Property_ID
WHERE pr.PropertyID = @PropertyID AND pr2.PropertyID = @PropertyID