Sql server 基于联接合并两个表-SQL Server 2012
我的第一张桌子Sql server 基于联接合并两个表-SQL Server 2012,sql-server,Sql Server,我的第一张桌子 select * from dbo.tblusertasks id pagename search _update _delete _insert 1 CustomerMaster 0 0 0 0 2 OrganizationMaseter 0 0 0 0 3
select *
from dbo.tblusertasks
id pagename search _update _delete _insert
1 CustomerMaster 0 0 0 0
2 OrganizationMaseter 0 0 0 0
3 Vendor/SupplierMaster 0 0 0 0
我的第二张桌子
select *
from dbo.tblpages
id pagenameid userid createdby search _update _delete _insert
1 1 1 1 1 1 1 1
2 2 1 1 1 1 1 1
我想合并这两个,并需要作为结果
id pagename search _update _delete _insert
1 CustomerMaster 1 1 1 1
2 OrganizationMaseter 1 1 1 1
3 Vendor/SupplierMaster 0 0 0 0
我尝试过这个查询,但它不起作用
SELECT
pg.id, pg.[pagename], tblp.[search],tblp.[_update] ,
tblp.[_delete], tblp.[_insert]
FROM
tblpages pg
LEFT JOIN
[tblusertasks] tblp ON tblp.pagename = pg.id
WHERE
tblp.userid = 1
它正在返回(我尝试了left和right join,但仍然返回相同的结果):
SIcne你说你已经尝试了左连接和右连接,但是它不起作用。更改表arounf也没用。您需要执行以下操作:
SELECT pg.id,
pg.[pagename],
tblp.[search],
tblp.[_update],
tblp.[_delete],
tblp.[_insert]
FROM [tblusertask] tblp
LEFT JOIN tblpages pg
ON tblp.ID = pg.pagenameid
这应该有用。希望这有助于。。。
这使您可以灵活地按页面名进行分区。。。计数、总数等
SELECT pagename,
T.pagenameid,
ISNULL(T.search, 0) AS search,
ISNULL(T._update, 0) AS _update,
ISNULL(T._delete, 0) AS _delete,
ISNULL(T._insert,0) AS _insert
FROM
(
SELECT
MAX(U.ID) OVER (PARTITION BY pagename) AS pagenameid,
MAX(U.search) OVER (PARTITION BY pagename) AS search,
MAX(U._update) OVER (PARTITION BY pagename) AS _update,
MAX(U._delete) OVER (PARTITION BY pagename) AS _delete,
MAX(U._insert) OVER (PARTITION BY pagename) AS _insert
FROM
tblusertasks U
LEFT JOIN
tblpages P ON U.id=P.pagenameid
)T
INNER JOIN tblusertasks UT ON UT.id=T.pagenameid
结果
删除条件tblp.userid=1的位置上的零件不应该是“on tblp.id=pg.id”吗?Pagename包含字符串和pg.id号。这可能是问题所在……我尝试过,但当我添加where条件时,它不会返回所需的输出以及您在帖子中的集合,您不应该需要where子句。它用于将来的使用,就像当我有多个用户时,然后Ex userid 2、3等,只要用户在一个表中,而不是在另一个表中,联接将返回该值。这个连接当前从tblpages中回调tblusertask中的所有内容,并且只回调与tblusertask中匹配的值key@AkhilRJ这与您想要的输出完全匹配。。。您能解释一下缺少了什么吗?search、update、delete和insert列是位类型的,因此MAX()对它无效
SELECT pagename,
T.pagenameid,
ISNULL(T.search, 0) AS search,
ISNULL(T._update, 0) AS _update,
ISNULL(T._delete, 0) AS _delete,
ISNULL(T._insert,0) AS _insert
FROM
(
SELECT
MAX(U.ID) OVER (PARTITION BY pagename) AS pagenameid,
MAX(U.search) OVER (PARTITION BY pagename) AS search,
MAX(U._update) OVER (PARTITION BY pagename) AS _update,
MAX(U._delete) OVER (PARTITION BY pagename) AS _delete,
MAX(U._insert) OVER (PARTITION BY pagename) AS _insert
FROM
tblusertasks U
LEFT JOIN
tblpages P ON U.id=P.pagenameid
)T
INNER JOIN tblusertasks UT ON UT.id=T.pagenameid