取消隐藏显示不正确数据和重复项的多个列

时间:2015-11-20 09:12:56

标签: sql-server unpivot

我有一个书籍表,其中包含主题和章节总页数和输入的页面。以下是我桌子的截图。

tbl_books

我根据总页数和基于主题的输入页面对此表进行解包

tbl_books_upv

以下是我用于unpivot的查询

/****** Script for SelectTopNRows command from SSMS  ******/
SELECT UID
       ,[Subject]
       ,TotalPages
       ,PagesEntered
    FROM ( SELECT UID
               ,[Subject]
               ,[Chapter1PagesEntered]
               ,[Chapter2PagesEentered]
               ,[Chapter1TotalPages]
               ,[Chapter2TotalPages]
            FROM [dbo].[tbl_books]
         ) AS SRC UNPIVOT ( TotalPages FOR Cities IN ( [Chapter1TotalPages],
                                                      [Chapter2TotalPages] ) ) AS upv UNPIVOT ( PagesEntered FOR Suppliers IN ( [Chapter1PagesEntered],
                                                              [Chapter2PagesEentered] ) ) AS upv
    WHERE RIGHT(TotalPages, 1) = RIGHT(PagesEntered, 1);

如果您看到第二个屏幕截图显示橙色框中突出显示的行,则unpivot会给出重复值,例如交叉产品,并且最后输出值与原始值不匹配。前几行是 返回正确的值但是在最后和中间不是。

例如,对于主题101004,第一行的总页数必须 24 24 ,第二行的 14 14 。查询在第一行中返回 24 24 ,第二行 24 14 ,第三行 14 14 14 24 在第四排。

同样,主题103009需要在第一行返回 15 12 ,在第二行返回 14 4 。但是我只有一行 14 4

我尝试更改WHERE RIGHT(TotalPages,1)= RIGHT(PagesEntered,1);但是我没有得到我想要的输出。我无法找到导致此错误值的原因。

我尝试了以下链接中提供的代码,但是他们没有解决我的问题。

Unpivoting Multiple Columns

Unpivoting Multiple Columns

这是我的SQL Fiddle链接。任何帮助都非常感谢。

提前致谢

1 个答案:

答案 0 :(得分:2)

您可以使用APPLY-Operator而不是UNPIVOT。

例如:

WITH CTE AS
(
SELECT r.* FROM (VALUES (1,'101001',16,14,16,14), 
                        (2,'101002',16,14,16,14),
                        (3,'101003',16,14,16,14),
                        (2,'101004',24,14,24,14)) AS r(UID,Subject,Chapter1PagesEntered,Chapter2PagesEntered,Chapter1TotalPages,Chapter2TotalPages)
)
SELECT CTE.UID, A.Chapter, A.Subject, A.PagesEntered, A.TotalPages
FROM CTE
CROSS APPLY (VALUES('Chapter1',UID,Subject,Chapter1PagesEntered, Chapter1TotalPages),
                   ('Chapter2',UID,Subject,Chapter2PagesEntered, Chapter2TotalPages)) AS A(Chapter,UID, Subject,PagesEntered,TotalPages);

我需要CTE,因为我没有像你这样的桌子。