我必须就使用不同信用卡类型进行的交易数量制作临时报告.出于报告的目的,可以假设所有以4开头的信用卡都是VISA卡,而以5开头的信用卡是万事达卡.
此查询适用于上述区别:
select card_type =
case substring(pan,1,1)
when '4' then 'VISA'
when '5' then 'MasterCard'
else 'unknown'
end,count(*),
sum(amount)
from transactions
group by card_type
Run Code Online (Sandbox Code Playgroud)
然而,在我们的情况下(不确定这是如何在世界范围内工作)所有以3开头的卡都可以被视为大莱卡,除了那些以37开头的AMEX卡.
像这样扩展上面的查询似乎是一个完整的黑客
select card_type =
case substring(pan,1,2)
when '30' then 'Diners'
...
when '37' then 'AMEX'
...
when '39' then 'Diners'
when '40' then 'VISA'
...
when '49' then 'VISA'
when '50' then 'MasterCard'
...
when '59' then 'MasterCard'
else 'unknown'
end,count(*),
sum(amount)
from transactions
group by card_type
Run Code Online (Sandbox Code Playgroud)
在所有情况下,除了前两位数与特殊情况匹配的情况外,是否有一种优雅的分组方式?
如果有人想帮忙,我也不知道如何标题这个问题...
编辑:我把MasterCard和VISA的值混为一谈,所以只是为了正确:)
SQL 2005中的存储过程 - 字段类型为NText
我编写一个存储过程来整理一些数据,然后再将其导入Microsoft CRM.到目前为止一切正常.
但是我需要在nText字段上做一个case语句.它需要针对大约3或4个文本值检查此字段并设置新字段(已在目标表中),该字段也是nText字段.
但是我收到错误"数据类型ntext和varchar在等于运算符不兼容.
我遇到过一些文章,但他们的解决方案看起来都非常复杂.
感谢您的高级帮助和建议.
如何通过T-SQL查询从SQL Server 2000检索数据库中的非系统表的名称?
我想得到一个存储过程调用的输出并创建一个永久表,不指定列.因为存储的proc返回了很多列...
那么..我怎么能这样做?
SELECT * INTO MYTABLE FROM MYSTOREDPROC @PARAM1 = 1, @PARAM2 = 'HELLO'
Run Code Online (Sandbox Code Playgroud)
可能吗??
例子可以帮到我很多
我有一个问题,这个查询语句让我在结果中重复使用GoalText.有任何想法吗?
完整的查询语句:
Select g.GoalText, convert(nvarchar, g.GoalID) + '|' + convert(nvarchar, r.GoalReqID) as GoalID, GoalReqID
from Goal g inner join GoalRequirement r
on g.GoalID = r.GoalID
where GoalReqID in
(Select GoalReqID
from GoalRequirement r inner join SurveyAnswer a
on r.QuestionID = a.QuestionID and ReqQuestionValue = SurveyAnswer
where a.CycleID = 93 and ReqBMILevel is null
and ReqEnergyBalance is null and SurveyAnswer = 1 and r.QuestionID in
(Select QuestionID from Question where QuestionParent = 6000));Run Code Online (Sandbox Code Playgroud)
结果:
GoalText GoalID GoalReqID Choose lasagna, ravioli, stuffed …
情况(忽略它很无聊):我有使用报告服务创建的报告.其中一些报告采用参数"月".他们输入他们想要的月份的整数.示例:December = 12.为了查看报告,我只是在visual studio中使用Report Viewer.我需要将月份字段作为下拉框,以便按名称选择月份.报告服务中有一个功能,允许您将字段绑定到存储过程,以便为下拉列表创建值/文本对.
问题:我不想在我的数据库中创建一个"月"表,但我需要一个可以返回所有月/ int对的存储过程.我确信有一个非常简单的解决方案,但我不确定它是什么!我的第一个想法是创建一个临时表,但我不知道如何添加手动添加每个月/ int对表...所有的建议表示赞赏!
我想要的是以下声明,除了不使用月表:
SELECT MonthID, MonthName
FROM Months
Run Code Online (Sandbox Code Playgroud) 我有两个表,一个联系人表和一个地址表.地址表包含联系人ID和4个地址行.我希望使用地址表中的信息更新联系人表.为简单起见,让表格如下:
地址(
.intact
int not null,
.address1 varchar(32)not null,
.address2 varchar(32)not null
)
contacts(
.id int primary key,
.addr1 varchar(32)not null,
.addr2 varchar(32)not null
)
如何(int tsql)从地址表更新联系人表?
谢谢.
我有两张桌子,A和B.
两者都具有完全相同的列.
我需要选择所有TableA中的项不 TableB中.
这是十字路口,对吗?我怎样才能做到这一点?
如果我只是用双引号替换所有传入的单引号,我不确定有人会破坏我的SQL.有人可以启发我的Oracle和SQL Server示例吗?谢谢.
string sql1 = "select * from users where user_id = '" + "O'Reily".Replace("'", "''").Replace("\", "") + "'";
Run Code Online (Sandbox Code Playgroud)
==>"从user_id ='O''Reily'的用户中选择*
string sql2 = "select * from users where user_id = '" + "O'''Reily".Replace("'", "''").Replace("\", "") + "'";
Run Code Online (Sandbox Code Playgroud)
==>"select*from users user_id ='O''''''Reily"
更新:斜杠'\'是应用程序中的受限字符,在查询中使用之前将被删除.双短划线可以很容易地添加到受限字符列表中.