SSRS在同一列中加入具有不同值的记录

时间:2018-12-14 16:49:22

标签: sql sql-server reporting-services sql-server-2012

因此,我不太确定该怎么写,我在专业环境中使用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

在此先感谢您的帮助,如果需要更多信息,请告诉我。 抱歉,如果重复的话,但是我找不到任何相关问题。

2 个答案:

答案 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
相关问题