我有两个简单的查询
SELECT Make,Color FROM(VALUES('Audi','Red'),('Audi','Blue'),('Audi','Black'),('BMW','Black'), ('宝马','黄色'))汽车(制造,颜色)
SELECT Color FROM(VALUES('Red'),('Blue'),('Black'),('Yellow'),('White'),('Silver'),('Brown')) AS颜色(颜色)
SQL1返回每个Car Maker提供的颜色
SQL2返回希望购买的汽车颜色
我想列出每个Car Maker无法提供的颜色。
如。奥迪怀特,奥迪黄...
请帮助我完成TSQL查询。
更新:这不是一个重复的问题。我已经尝试过这个答案,但我没有得到我期待的结果。我希望人们在投票之前阅读这个问题或将其标记为重复。
答案 0 :(得分:2)
这就是你得到的答案。正如我在评论中提到的那样假设你有Makes
表,但是,由于你没有提供它,我还没有使用它。
WITH C AS (
SELECT Color FROM (VALUES('Red'),('Blue'),('Black'),('Yellow'),('White'),('Silver'),('Brown')) AS Colors(Color)),
MC AS (
SELECT Make, Color FROM (VALUES('Audi','Red'),('Audi','Blue'),('Audi','Black'),('BMW','Black'),('BMW','Yellow')) AS Cars(Make, Color)),
--This is the answer
--I assume you actually have a table for Car makes, however, you haven't incldued that in your data, so enither have I:
M AS (
SELECT DISTINCT Make
FROM MC)
SELECT *
FROM C
CROSS APPLY M
WHERE NOT EXISTS (SELECT *
FROM MC
WHERE C.Color = MC.Color
AND M.Make = MC.Make);
答案 1 :(得分:1)
另一种选择是使用public void CreateDataTableFromTypedRow()
{
DataTable dt = new DataTable;
dt.Rows.Add(_DataRow);
}
EXCEPT