0

我有这样的搜索数据查询:

select top 100 *  from Payment 
where PayId is not null   and
PayAccount like '%10158002%'and 
PayCustName like '%XXXX XXXXX%'and 
PayAmount like '%429000%'and 
PayAmountPaid like '%429000%'and 
PayResponse like '%00%'and
PayRefNo like '%101306000013%'and
cast(PayDatetime as date) = ( select convert(date , '03/06/2013', 103)) 
order by PayDatetime DESC

并给我这样的结果:

PayId   PayAccount  PayCustName PayAmount   PayAmountPaid   PayResponse PayRefNo    PayScreenText   PayReceiptText  PayDatetime PayBankCode
49       10158002   XXXX XXXXX  429000        429000         00        101306000013             xxx              xxx   2013-06-03 11:43:18.210  112

我必须这样做才能通过与其他表进行内部连接来生成PayResponse 00文本:success

select para.Value2
from Payment pay 
inner join
Parameter para
on pay.PayResponse = para.Value1

我应该通过使用另一个内部连接来检查 refno 是否被另一个表使用,但它使用了一个存储过程:

ALTER PROCEDURE [dbo].[Rintis_StatusReversal]
@RefNoPay as varchar (20),
@Count as int output,
@Response as int output,
@Text as varchar(20) output


AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;


        Select  @Count = COUNT(*)
        from
            payment Pay
                inner join
            Reversal Rev
                on Pay.PayRefNo = Rev.PayRefNo        
        where Pay.PayRefNo = @RefNoPay

        if @Count > 0
        Begin
        SET @Response = 1
        SET @Text = 'Reversed'
        End
        Else
        Begin
        SET @Response = 0
        SET @Text = 'Paid'
        End

select @Response , @Text
END

通过执行我想获得 @text 值的过程,它是successor reversed。我想将值输入到第一个查询结果。

所以我想得到的查询是这样的:

  PayId PayAccount  PayCustName PayAmount   PayAmountPaid   PayResponse PayRefNo    PayScreenText   PayReceiptText  PayDatetime PayBankCode RefStatus
    49       10158002   XXXX XXXXX  429000        429000         00        101306000013             xxx              xxx   2013-06-03 11:43:18.210  112 Success

可以这样做吗?我仍然对复杂的 sql 查询感到困惑。谢谢你的帮助

4

1 回答 1

1

是的,它可以做到。但是,我不会使用存储过程。尝试一个函数,它可以简单地作为列附加到您的 SELECT 并返回您想要的字符串。但是,请准备好损失很多性能,因为每次生成记录复合体时都会调用该函数。

因此,我建议您将上述 SP 转换为返回 CHAR(20) 的函数,例如它应该可以工作。无需在联接中将其链接为表格。

于 2013-06-03T06:19:48.993 回答