Another way to do it would be the following. Make TypeOfTest an array:

Class My.Test extends %Persistent
{
Property PatientName;
Property TypeOfTest as array of %String; //%Numeric maybe?
Property OrderID;
}

In the array, each element is a pair of key and value. In this case, you add a key with the name of type of test and with value the result of test. And if the "Name" is "Thyroid", then you add the rest of the elements. For example:

  do test.TypeOfTest.SetAt("10", "Thyriod")
  do test.TypefTest.SetAt("148", Tsh)

This way, for your array in SQL you will get a separate table, the name of it will be a combination of class name and property name.

You can actually write a select just to query results of the tests and then find the name of the order using the primary key (which is a link to the main table My.Test)

Hello,

I would suggest you do the following.

I understand you have a class something like:

Class My.Test extends %Persistent
{
Property PatientName;
Property TypeOfTest as My.TestType;
Property OrderID;
}

Make TypeOfTest an instance of another class My.TestType:

Class My.TestType extends %SerialObject
{
Property Name As %String(VALUELIST = ",Sugar,Urine,Thyroid");
Property Tsh;
...
}

In this case, as Robert has mentioned, you will be able to write a query like 

select PatientName, TypeOfTest_Name, TypeOfTest_Tsh
  from My.Test