public static function getJoinQuery($sids, $cols, $perPage, $pageNo)
 {
     global $db;
     $finalQuery = "";
     $finalQueryJoinWherePart = "";
     if (count($sids) == 1) {
         $sid = UtilsForWizard::getWordUntilFirstDot($sids[0]);
         $tableName = UtilsForWizard::stripWordUntilFirstDot($sids[0]);
         $sourceType = ExternalMSSQL::GetSourceType($sid);
         if ($sourceType == "data file") {
             return ExternalMSSQL::wrapInLimit($pageNo, $perPage, $tableName);
         } else {
             $colsString = "'" . implode("','", $cols) . "'";
             $query = ExternalMSSQL::makeQueryToRotateTable($sid, $tableName, $colsString);
             $finalQuery = $query;
             return ExternalMSSQL::wrapInLimit($pageNo, $perPage, "(" . $finalQuery . ") as b");
         }
     } else {
         for ($i = 0; $i < count($sids) - 1; $i++) {
             $sidFrom = UtilsForWizard::getWordUntilFirstDot($sids[$i]);
             $tableNameFrom = UtilsForWizard::stripWordUntilFirstDot($sids[$i]);
             $sourceTypeFrom = ExternalMSSQL::GetSourceType($sidFrom);
             if ($sourceTypeFrom == "data file") {
                 $colsResult = ExternalMSSQL::getAllTableNameDotColumnsBySid($sidFrom, $tableNameFrom);
                 $colsRenamed = $colsResult->colsRenamed;
                 $finalQuery .= "(select {$colsRenamed} from {$tableNameFrom}) as rot{$i}, ";
             } else {
                 $colsString = "'" . implode("','", $cols) . "'";
                 $query = ExternalMSSQL::makeQueryToRotateTable($sidFrom, $tableNameFrom, $colsString, $perPage, $pageNo);
                 $finalQuery .= "({$query}) as rot{$i}, ";
             }
             $sidTo = UtilsForWizard::getWordUntilFirstDot($sids[$i + 1]);
             $tableNameTo = UtilsForWizard::stripWordUntilFirstDot($sids[$i + 1]);
             $sourceTypeTo = ExternalMSSQL::GetSourceType($sidTo);
             $finalQueryJoinWherePart .= ExternalMSSQL::getWhereJoinPart($i, $sidFrom, $tableNameFrom, $sidTo, $tableNameTo, $sourceTypeFrom, $sourceTypeTo);
         }
         $sidFrom = UtilsForWizard::getWordUntilFirstDot($sids[count($sids) - 1]);
         $tableNameFrom = UtilsForWizard::stripWordUntilFirstDot($sids[count($sids) - 1]);
         $sourceType = ExternalMSSQL::GetSourceType($sidFrom);
         if ($sourceType == "data file") {
             $colsResult = ExternalMSSQL::getAllTableNameDotColumnsBySid($sidFrom, $tableNameFrom);
             $colsRenamed = $colsResult->colsRenamed;
             $finalQuery .= "(select {$colsRenamed} from {$tableNameFrom}) as rot" . (count($sids) - 1);
         } else {
             $colsString = "'" . implode("','", $cols) . "'";
             $query = ExternalMSSQL::makeQueryToRotateTable($sidFrom, $tableNameFrom, $colsString, $perPage, $pageNo);
             $finalQuery .= "({$query}) as rot" . (count($sids) - 1);
         }
         if ($finalQueryJoinWherePart != "") {
             $finalQueryJoinWherePart = substr($finalQueryJoinWherePart, 0, -4);
         }
         $finalQuery = "select * from {$finalQuery} where {$finalQueryJoinWherePart}";
         return ExternalMSSQL::wrapInLimit($pageNo, $perPage, "(" . $finalQuery . ") as b");
     }
 }