with p as ( select BusinessEntityID, FirstName, MiddleName, LastName, PersonType from Person.Person ) select p.BusinessEntityId, 'FirstName' as FieldLabel, FirstName from p union all select p.BusinessEntityId, 'MiddleName' as FieldLabel, MiddleName from p union all select p.BusinessEntityId, 'LastName' as FieldLabel, LastName from p union all select p.BusinessEntityId, 'PersonType' as FieldLabel, PersonType from p order by BusinessEntityID, FieldLabel;
However, RDBMS-specific constructs are well-optimized:
with p as ( select BusinessEntityID, FirstName = convert(varchar, FirstName), LastName = convert(varchar, LastName), MiddleName = ISNULL(convert(varchar,MiddleName), ''), PersonType = convert(varchar, PersonType) from Person.Person ) select unpvt.BusinessEntityID, unpvt.FieldLabel, unpvt.FieldValue from p unpivot (FieldValue FOR FieldLabel in (FirstName, MiddleName, LastName, PersonType)) as unpvt order by unpvt.BusinessEntityID, unpvt.FieldLabel;
These are the two queries' logical reads:
(79888 row(s) affected) Table 'Person'. Scan count 12, logical reads 5143, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. (79888 row(s) affected) Table 'Person'. Scan count 3, logical reads 4186, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
No comments:
Post a Comment