使用内部连接将两个或多个条件定义到存储过程中?
Define two or more conditions into a stored procedure with inner join?
首先,我需要通过变量 @company_id
过滤表 TbTaxCompanies
和 tbCompany
中的数据...并且有效!
CREATE PROCEDURE taxcompany_importTaxes
@company_id int
AS
SELECT
tc.idtaxcompany, tc.company_id, c.nameCompany,
ct.tax1, ct.tax2, ct.tax3, ct.dateUpgrade
FROM
tbTaxCompanies tc
INNER JOIN
tbCompany c ON tc.company_id = c.idcompany
WHERE
tc.company_id = @company_id
ORDER BY
tc.idtaxcompany ASC
其次,我需要再次过滤之前使用 @company_id
选择的公司的日志集,但现在只获取最新更新的税款(只有一行)......这行不通!
CREATE PROCEDURE taxcompany_importTaxes
@company_id int
AS
SELECT
tc.idtaxcompany, tc.company_id, c.nameCompany,
ct.tax1, ct.tax2, ct.tax3, ct.dateUpdate
FROM
tbTaxCompanies tc
INNER JOIN
tbCompany c ON tc.company_id = c.idcompany
WHERE
tc.company_id = @company_id
AND (tc.dateUpdate = (SELECT MAX (dateUpdate) FROM tbTaxCompanies))
ORDER BY
tc.idtaxcompany ASC
非常感谢任何帮助。
如果您想要第一个结果集中的最新行,只需使用 order by
和 top
:
SELECT TOP (1) WITH TIES
tc.idtaxcompany, tc.company_id, c.nameCompany,
tc.tax1, tc.tax2, tc.tax3, tc.dateUpgrade
FROM tbTaxCompanies tc
INNER JOIN tbCompany c on tc.company_id = c.idcompany
WHERE tc.company_id = @company_id
ORDER BY tc.dateUpdate DESC
如果您想要每组 的最新行 ,例如每个 tc.idtaxcompany
,那么您只需将 ORDER BY
子句更改为:
ORDER BY RANK() OVER(PARTITION BY tc.idtaxcompany ORDER BY tc.dateUpdate DESC)
首先,我需要通过变量 @company_id
过滤表 TbTaxCompanies
和 tbCompany
中的数据...并且有效!
CREATE PROCEDURE taxcompany_importTaxes
@company_id int
AS
SELECT
tc.idtaxcompany, tc.company_id, c.nameCompany,
ct.tax1, ct.tax2, ct.tax3, ct.dateUpgrade
FROM
tbTaxCompanies tc
INNER JOIN
tbCompany c ON tc.company_id = c.idcompany
WHERE
tc.company_id = @company_id
ORDER BY
tc.idtaxcompany ASC
其次,我需要再次过滤之前使用 @company_id
选择的公司的日志集,但现在只获取最新更新的税款(只有一行)......这行不通!
CREATE PROCEDURE taxcompany_importTaxes
@company_id int
AS
SELECT
tc.idtaxcompany, tc.company_id, c.nameCompany,
ct.tax1, ct.tax2, ct.tax3, ct.dateUpdate
FROM
tbTaxCompanies tc
INNER JOIN
tbCompany c ON tc.company_id = c.idcompany
WHERE
tc.company_id = @company_id
AND (tc.dateUpdate = (SELECT MAX (dateUpdate) FROM tbTaxCompanies))
ORDER BY
tc.idtaxcompany ASC
非常感谢任何帮助。
如果您想要第一个结果集中的最新行,只需使用 order by
和 top
:
SELECT TOP (1) WITH TIES
tc.idtaxcompany, tc.company_id, c.nameCompany,
tc.tax1, tc.tax2, tc.tax3, tc.dateUpgrade
FROM tbTaxCompanies tc
INNER JOIN tbCompany c on tc.company_id = c.idcompany
WHERE tc.company_id = @company_id
ORDER BY tc.dateUpdate DESC
如果您想要每组 的最新行 ,例如每个 tc.idtaxcompany
,那么您只需将 ORDER BY
子句更改为:
ORDER BY RANK() OVER(PARTITION BY tc.idtaxcompany ORDER BY tc.dateUpdate DESC)