我的桌子上有这个挑选的列(导致其余部分与问题无关)。
ID | Generic Name
-----+---------------
001 | Cetirizine
002 | Cetirizine
003 |
004 | Paracetamol
我希望我的组合框只显示一个条目Cetirizine
(或任何已复制的数据),并且没有空的通用名称(某些数据没有通用名称)。
我试过了:
select
Item_GenName
from
ItemMasterlistTable
where
nullif(convert(varchar, Item_GenName), '') is not null
但它只实现了无空数据部分。
我已尝试使用DISTINCT
,但它不起作用且有人建议JOIN
但我认为它不起作用,因为我只使用了1个表。
我也试过了:
SELECT
MIN(Item_ID) AS Item_ID, Item_GenName
FROM
ItemMasterlistTable
GROUP BY
Item_GenName
但始终存在错误:
text,ntext和image数据类型无法进行比较或排序,除非使用IS NULL或LIKE运算符。
答案 0 :(得分:2)
以下查询应仅返回不同的非空Item_GenNames:
SELECT DISTINCT Item_GenName
FROM ItemMasterlistTable
// because Item_GenName is of type *text*, the below in lieu of `is not null` and `!= ''`
WHERE datalength(Item_GenName) != 0
你说你试过DISTINCT
而它没有用,所以我想澄清一下,
DISTINCT
关键字将在select语句的完整域中返回唯一记录。如果在select语句中包含ID列,即使是不同的选择也会返回重复的Item_GenNames b / c,组合的ID / Item_GenName记录将是唯一的。在select子句中仅包含Item_GenName以保证此列的不同值。
答案 1 :(得分:1)
以下查询可能有用。
declare @tab table (ID varchar(10), Generic_Name varchar(100))
insert into @tab
select '001', 'Cetirizine'
union
select '002', 'Cetirizine'
union
select '003', ''
union
select '004', 'Paracetamol'
select MIN(substring(ID, 1, 10)) ID, substring(Generic_Name, 1, 1000) Generic_Name
from @tab
where substring(Generic_Name, 1, 1) <> ''
group by substring(Generic_Name, 1, 1000)
答案 2 :(得分:1)
您可以尝试此查询
Select distinct Item_GenName FROM(
Select * FROM ItemMasterlistTable where Item_GenName <> ''
)t
内部查询删除非空记录,外部查询从内部输出中获取不同记录