Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 在SQL Server 2005中从成员资格表中查找删除率_Sql Server 2005_Reporting - Fatal编程技术网

Sql server 2005 在SQL Server 2005中从成员资格表中查找删除率

Sql server 2005 在SQL Server 2005中从成员资格表中查找删除率,sql-server-2005,reporting,Sql Server 2005,Reporting,我们有一个观点,存储我们的会员持有的会员计划的历史,我们已经运行了一段时间的半价直接借记报价。我们被要求报告人们是否允许直接借记续费(全额),但我不是SQL专家 实际上的观点是 memberRef,historyRef,validFrom,validTo,MembershipType,PaymentType,totalAmount 这里 memberRef标识人员(int) historyRef标识此行(int) validFrom和validTo是计划的开始和结束(日期时间) Members

我们有一个观点,存储我们的会员持有的会员计划的历史,我们已经运行了一段时间的半价直接借记报价。我们被要求报告人们是否允许直接借记续费(全额),但我不是SQL专家

实际上的观点是

memberRef,historyRef,validFrom,validTo,MembershipType,PaymentType,totalAmount

这里

  • memberRef标识人员(int)
  • historyRef标识此行(int)
  • validFrom和validTo是计划的开始和结束(日期时间)
  • MembershipType是计划的类型(int)
  • PaymentType是直接借记卡或信用卡(字符串-DD或EFT)
  • totalAmount是计划的价格(十进制)
我想知道是否有一个查询,而不是一个游标,我可以用来计算半价保单的数量,并有另一个直接借记保单

如果我们也能捕捉到,如果这个人第一次以半价加入,或者在他们接受半价激励之前,会员资格已经失效,那么这将是非常棒的

提前感谢您的帮助

比如说

select count(MemberRef), max(vhOuter.validFrom) "most recent plan start",
(select top(1) vh2.validFrom 
from v_Membershiphistory vh2 
where (vh2.totalamount = 14.97 or vh2.totalamount = 25.50)  
and vh2.memberref = vhOuter.memberref
order by createdat desc
) "half price plan start"
from v_membershiphistory vhOuter
where vhOuter.memberref in (select vh1.memberref from v_membershiphistory vh1 where     vh1.totalamount = 14.97 or vh1.totalamount = 25.50)--have taken up offer
group by memberref
having max(vhOuter.validFrom) > (select top(1) vh2.validFrom 
                                from v_Membershiphistory vh2 
                                where (vh2.totalamount = 14.97 or vh2.totalamount = 25.50)  
                                and vh2.memberref = vhOuter.memberref
                                order by createdat desc
                            )
这将显示具有半价计划且有效起始日期大于该计划有效起始日期的成员

不完全正确,因为我们应该测试它是相同的计划,但

如果我将select here更改为just count(memberRef),我将获得我正在分组的成员的memberRef计数,即对于5220个结果,我将返回5220行,每个行实际上包含我选择的计划数

但我需要计算接受该提议的人数和续约比例。此外,不接受该提议的人群中的更新率(我猜这是一个很小的变化,一旦我得到一组排序)

我想我在看一个人是如何在集合上操作的,但是在不使用光标的情况下比较每个不同的人的多行。但我可能错了:)

试试以下方法:

SELECT
    a.*, b.*
    FROM YourTable           a
        INNER JOIN YourTable b On a.memberRef=b.memberRef and a.validToDate<b.validFromDate
    WHERE b.PaymentType='?direct debit?' and a.Cost='?half price?'
SELECT
    COUNT(a.memberRef) AS TotalCount
    FROM YourTable           a
        INNER JOIN YourTable b On a.memberRef=b.memberRef and a.validToDate<b.validFromDate
    WHERE b.PaymentType='?direct debit?' and a.Cost='?half price?'
选择
a、 *,b*
从你的桌子上
在a.memberRef=b.memberRef和a.validToDate上内部联接表b尝试以下操作:

SELECT
    a.*, b.*
    FROM YourTable           a
        INNER JOIN YourTable b On a.memberRef=b.memberRef and a.validToDate<b.validFromDate
    WHERE b.PaymentType='?direct debit?' and a.Cost='?half price?'
SELECT
    COUNT(a.memberRef) AS TotalCount
    FROM YourTable           a
        INNER JOIN YourTable b On a.memberRef=b.memberRef and a.validToDate<b.validFromDate
    WHERE b.PaymentType='?direct debit?' and a.Cost='?half price?'
选择
a、 *,b*
从你的桌子上

在a.memberRef=b.memberRef和a.validToDateI上内部联接表b我需要更多地了解数据库(表、列及其内容的含义),然后才能解决这个问题@Philip我也猜到了:-)在解决这个问题之前,我需要更多地了解您的数据库(表、列及其内容的含义)@菲利普:我也猜到了:-)这为我指明了正确的方向。另外,因为我也完全自学了SQL,所以我不知道您可以像这样直接向联接添加条件,所以您为我解决了另一个问题。耶!这为我指明了正确的方向。另外,因为我也完全自学了SQL,所以我不知道您可以像这样直接向联接添加条件,所以您为我解决了另一个问题。耶!