繁体   English   中英

MySQL 联合查询:在一个联合查询中向 TEMP1 表 ClaimID 传递 TEMP ClaimID 字段值

[英]MySQL Union query: PASSING TEMP ClaimID field value to TEMP1 table ClaimID in one union query

CREATE DEFINER=`root`@`localhost` PROCEDURE `SP_DupAuditCriteria_1`()
BEGIN
    set @RowNbr=concat(date_format(curdate(),'%Y%m%d'),'0000000');

select temp.* from
(SELECT c.*, concat(c.VendorID,a.VendorID) as MergeH200A, concat(a.VendorID,c.VendorID) as MergeH200B, 'New' as Record_Type, @RowNbr:= @RowNbr + 1 AS ClaimID
FROM tbldupaudit_currentitems AS c
    inner join tbldupaudit_archiveitems a 
        on c.InvoiceID = a.InvoiceID
        and c.GrossAmount = a.GrossAmount) as temp
    inner join tbldupaudit_archiveitems b
        on temp.InvoiceID = b.InvoiceID
        and temp.GrossAmount = b.GrossAmount
        and temp.VendorID = b.VendorID
        and temp.VoucherID <> b.VoucherID
Union all
select temp1.* from
(SELECT f.*, concat(f.VendorID,d.VendorID) as MergeH200A, concat(d.VendorID,f.VendorID) as MergeH200B, 'ARCHIVE' as Record_Type, 1 AS ClaimID
FROM tbldupaudit_archiveitems AS f
    inner join tbldupaudit_currentitems d 
        on f.InvoiceID = d.InvoiceID
        and f.GrossAmount = d.GrossAmount) as temp1
    inner join tbldupaudit_currentitems e
        on temp1.InvoiceID = e.InvoiceID
        and temp1.GrossAmount = e.GrossAmount
        and temp1.VendorID = e.VendorID
        and temp1.VoucherID <> e.VoucherID
order by InvoiceID, Record_Type DESC;

END 

尝试为每对创建唯一的 ClaimID。 我能够为前半联合所有生成序列号,但相同的 ClaimID 不能在另一半联合全部生成。 请帮助我了解如何为匹配的项目创建/生成一个唯一 ID。

谢谢!![在此处输入图像描述 ] 1

在第二个 select (在 UNION ALL 之后)中,您没有递增 var,因此如果您希望两个值都递增,请尝试在第二个中使用 var

select temp.* 
from (
    SELECT c.*, concat(c.VendorID,a.VendorID) as MergeH200A, concat(a.VendorID,c.VendorID) as MergeH200B, 'New' as Record_Type
        , @RowNbr:= @RowNbr + 1 AS ClaimID
    FROM tbldupaudit_currentitems AS c
    inner join tbldupaudit_archiveitems a on c.InvoiceID = a.InvoiceID
        and c.GrossAmount = a.GrossAmount
    ) as temp
inner join tbldupaudit_archiveitems b on temp.InvoiceID = b.InvoiceID
    and temp.GrossAmount = b.GrossAmount
        and temp.VendorID = b.VendorID
            and temp.VoucherID <> b.VoucherID
Union all
select temp1.* 
from ( 
    SELECT f.*, concat(f.VendorID,d.VendorID) as MergeH200A, concat(d.VendorID,f.VendorID) as MergeH200B, 'ARCHIVE' as Record_Type
        , @RowNbr:= @RowNbr + 1 AS ClaimID
    FROM tbldupaudit_archiveitems AS f
    inner join tbldupaudit_currentitems d on f.InvoiceID = d.InvoiceID
        and f.GrossAmount = d.GrossAmount
) as temp1
inner join tbldupaudit_currentitems e on temp1.InvoiceID = e.InvoiceID
      and temp1.GrossAmount = e.GrossAmount
        and temp1.VendorID = e.VendorID
            and temp1.VoucherID <> e.VoucherID
order by InvoiceID, Record_Type DESC;

建模示例 - 见小提琴

SELECT CONCAT( 'prefix', LPAD( CASE @prev 
                               WHEN @prev := InvoiceID 
                               THEN @num
                               ELSE @num := @num + 1
                               END, 8, '0' ) ) ClaimID, InvoiceID, Amount, FromTable
FROM ( SELECT InvoiceID, Amount, 'CurrentItems' FromTable
       FROM CurrentItems
       UNION ALL
       SELECT InvoiceID, Amount, 'ArchivedItems'
       FROM ArchivedItems
       WHERE EXISTS ( SELECT NULL 
                      FROM CurrentItems
                      WHERE CurrentItems.InvoiceID = ArchivedItems.InvoiceID) ) unioned,
     ( SELECT @prev := 0, @num := 1000 ) variables
ORDER BY InvoiceID, FromTable DESC;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM