下面是我的SQL查询的一部分,只是因为它很长。
问题是当我将CASE添加到我的select语句时,它会给我一个错误。 NSO Review列包含日期。但是,并非所有行都有日期可用,然后查询将' 1900-01-01'代替。我想用NO替换它,如果有任何其他值,则输入YES。你能帮忙吗
SELECT 'NSO Review' = ISNULL(tblTaskEventsHistory.TimeIn,''),
CASE CAST(tblTaskEventsHistory.TimeIn AS varchar(102))
WHEN '1900' THEN 'NO'
ELSE 'YES'
END,
'Business Group' = ISNULL(MetadataBG.Value,''),
'CTN' = ISNULL(MetadataCT.Value,''),
错误
Msg 1038,Level 15,State 5,Line 277 对象或列名称缺失或为空。对于SELECT INTO语句,请验证每列是否具有名称。对于其他语句,请查找空别名。别名定义为""或[]是不允许的。将别名更改为有效名称。
答案 0 :(得分:1)
您应该按照以下错误消息:"别名定义为""或[]不允许"和"验证每列的名称是":
SELECT NSO_Review = ISNULL(tblTaskEventsHistory.TimeIn,''),
TimeIn = CASE CAST(tblTaskEventsHistory.TimeIn AS varchar(102))
WHEN '1900' THEN 'NO'
ELSE 'YES'
END,
答案 1 :(得分:0)
如前所述,您应该使用DateTime函数。 为了比较日期的某些部分,有功能DATEPART (https://msdn.microsoft.com/en-us/library/ms174420.aspx)。
然后你可以尝试这个:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication4
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XmlReader reader = XmlReader.Create(FILENAME);
string id = "UMTS900";
object coverages = null;
while (!reader.EOF)
{
if (reader.Name != "Tech")
{
reader.ReadToFollowing("Tech");
}
if (!reader.EOF)
{
XElement tech = (XElement)XElement.ReadFrom(reader);
if((string)tech.Attribute("ID") == id)
{
coverages = tech.Descendants("Coverage").Select(x => new
{
id = (string)x.Attribute("ID"),
downLoad_Speed = (int)x.Element("DownLoad_Speed"),
upLoad_Speed = (int)x.Element("Upload_Speed"),
}).ToList();
break;
}
}
}
}
}
}
希望它会帮助你。
答案 2 :(得分:0)
您错过了案例陈述列的名称。