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

successまたはである @text 値を取得したいプロシージャを実行します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 に答える