您好我有一张表,其中包含产品属性名称和产品属性值。
有点像这样:
PAName1 PAValue1 PAName2 PAValue2 PAName3 PAName3 PAName4 PAName5
Height 6ft Length 186cm Weight 74kg Name John
Length 190cm Height 6ft Weight 83kg Name Mathew
Weight 55Kg Length 186cm Height 5.5ft Name Anthony
Name Peter Length 186cm Weight 74kg Height 6ft
如何选择高度为6英尺的行?
我知道如何使用In
命令我可以选择所有PA来找到它,但我正在寻找更好的解决方案,
只想编辑我目前处理数百万行的内容,其中某些行具有不同的产品属性。例如,某些行没有Height作为值,它们可能具有Country。某些行没有任何名称。这阻止我用新的列名创建一个新表,因为我无法控制数据输入..
答案 0 :(得分:1)
您可以从简单的
开始SELECT * FROM table
WHERE (PAName1 = 'Height' AND PAValue1 = '6ft')
OR (PAName2 = 'Height' AND PAValue2 = '6ft')
...
OR (PAName5 = 'Height' AND PAValue5 = '6ft')
但更好的方法是将这些值存储在相应的列中。尝试重新设计您的表格:
CREATE TABLE Persons
(
Id uniqueIdentifier,
Name varchar(255),
Height float,
Length float,
Weight float
);
答案 1 :(得分:0)
有点不清楚(至少对我而言)你的产品名称,属性和价值如何联系在一起。我怀疑你的样本数据遗漏了产品名称。如果是这样,我会将其创建为Entity-Attribute-Value table。
尝试类似:
CREATE TABLE dbo.product_attributes
(
product_name VARCHAR(10) NOT NULL,
attribute VARCHAR(255) NOT NULL,
value VARCHAR(255) NULL
)
然后您可以像SELECT * FROM dbo.product_attributes WHERE attribute = 'Height' AND value = '6ft'
答案 2 :(得分:-1)
好的,我没有测试,但尝试以下
修改
;with p AS
(
SELECT COLUMN1,COLUMN2,LEFT(Height, len(Height)-2) AS HeightValue FROM YourTable
)
select * FROM p WHERE p.HeightValue ='6'
注意强>
len(Height)-2 to exclude the ft from the height value