我有一个包含两列FieldName和FieldValue的表,它们都是varchar。 FieldName / FieldValue可以是到期日期或数量,如下所示:
我想选择所有行并按最大数量和最大到期日期对它们进行分组,最好不要使用UNION将其拆分。
我尝试了以下但收到了“操作数类型冲突:数字与日期不兼容”
SELECT
FieldName,
CASE FieldName
WHEN 'Quantity'
THEN MAX(CAST(FieldValue AS NUMERIC))
WHEN 'Expiry'
THEN MAX(CAST(FieldValue AS DATE))
END AS FieldValue
FROM MyTable
GROUP BY FieldName;
是否可以混合这样的数据类型?
答案 0 :(得分:1)
最好这样做 - 你只有2个值用于分组:
SELECT 'Quantity' AS Type, CAST(MAX(CAST(FieldValue AS NUMERIC)) AS VARCHAR) AS MaxValue
FROM MyTable WHERE FieldName='Quantity'
UNION
SELECT 'Expiry', CAST(MAX(CAST(FieldValue AS DATE)) AS VARCHAR)
FROM MyTable WHERE FieldName='Expiry'
通常,将不同类型的值放在同一列中是个坏主意。您可以将FieldName的当前值(Qty / Exp)和其他2列作为Quantity,将其中一列作为Expiry,可能为空(NULL)值。
答案 1 :(得分:0)
没有。
您标记为“FieldValue”的列必须具有给定的数据类型。你把两种不同的类型合二为一!
如果您需要同时拥有这两个值,请考虑以下事项:
.bind
答案 2 :(得分:0)
嗨,试试这个 -
select FieldName,
CASE
WHEN FieldName = 'Quantity' THEN
cast((select max(cast(FieldValue as numeric)) from #tmp where
FieldName='Quantity') as varchar)
else
cast((select max(cast(FieldValue as date)) from #tmp where
FieldName='Expiry') as varchar)
end as 'New'
from MyTable